2016-02-20 30 views
1

的PHP分离,开始我不完全相信,如果这个问题将适合的SO所以主持人请关闭它,如果它不适合的问题模型...关注和MVC

我一直在读最近MVC和SoC有很多,以及它们如何与PHP编程相关联,并且在掌握概念与当前编程风格的差异时遇到了一些困难。我写的任何应用程序都使用url_rewrite路由,路由由单个文件处理,该文件根据请求的子系统选择适当的controller.php文件。然后在该控制器文件中分配最终的smarty模板文件,并将包含该页面的业务逻辑的PHP文件包含在堆栈中。

我遇到的问题是,虽然我查看MVC和SoC信息,但我看到的所有示例都是作为广泛的相互依赖的类和一些相当深的命名空间编写的,但是当我编码时,我只使用对象,我需要一个对象对于可重复使用但截然不同的代码(与PHP站点本身的对象示例一致),结束了一些代码的分类和命名空间,将近70%的应用程序保留在全局名称空间中,而不进行分类。在我看来,这种编码技术仍然符合关注点分离的设计原则,尽管我不太了解MVC,因为我可以找到的每个MVC示例都是由大量类构建的。

有人可以请解释一下,如果我在这里取得基地的基础,或者如果我正在实现SoC,甚至可能使用我当前的编码实现MVC,并向我解释如果将整个应用程序嵌入到一系列类中是SoC和MVC 。

感谢

+1

不知道如何用给出的信息回答这个问题。 MVC和SoC可能会出现很多问题,但它们不是专有的。例如。请参阅http://stackoverflow.com/questions/9355021/mvc-implemented-in-pure-c或https://hackage.haskell.org/package/mvc-1.1.1/docs/MVC.html。与命名空间相同;他们可能会贡献;但它们不是MVC或SoC的不可避免的组件。 – VolkerK

回答

2

OK我通常采取的这些开放式的问题:P

让我重组你的整个事情到一个新的问题 - 随时告诉我,我错了!

我想你是问 - “是我的编码风格,符合​​了XYZ最佳实践?”

现在看看 - 我已经在各种各样的角色,而且我坚信,从来没有人破获一个完整的SoC架构 - 在某些时候总会有让别人在观看结束做他们的工作之间有人上游摄取输入并利用这个机会,使得它关系到数据库和逻辑的权衡和。

例如 - 我实际上正在构建一个以HTML文件作为输入的系统,通过PHP读取它们。 PHP的HTML元素转换成一堆JSON,并增加了逻辑基于x,y和z是JSON,然后塞到它给Facebook反应的组分 - 其将所有这些归结于HTML/DOM - 当你向自己解释有是一款香肠机,它将HTML作为输入,并输出HTML,你可以看到他们为什么会去 - 圣洁的狗屎你在做什么!

现在 - 为什么我们这样做?因为这对项目有意义,对团队有意义。我们可以同样使用一些预定义的框架和等等等等 - 但是这对我们很有用。

(这里需要注意的是,如果你需要一套高性能的应用程序,这可能是错误的做法,但是 - 请记住,你看(相互依赖类等。)也可能不是高性能 - PHP代码的优化是艰苦的工作 - 我的建议是,先让它工作,然后如果产品成功了,请付费人来修复你的低劣代码 - 服务器时间很便宜 - 你的时间不是)

我的发言没有具体的例子和用例 - 人们很难评论你的方法 - 但是要明白,有很多不同的方法来做事情,你可能会看到许多用一种方式编写的开源代码或者其他,但是如果你写了一些能够实现目标的东西,那么你唯一的担心应该是它的性能很好,并且它具有足够的分离度,这样你的设计者就可以在设计上工作,编码人员可以在代码上工作,你的CEO可以看在销售数字。

希望这会有所帮助。

+0

谢谢@IaMaCuP,这很好地解决了我的困惑,谢谢。 –

+0

永远是一种享受 - 将您的解决方案集中在团队和用户身上,您将获得更好的结果 - 我永远不会强调这一点:) - AWS很便宜!人不是。 – IaMaCuP

2

从你提供的信息来看,你做得很好。我认为你掌握了分离问题和MVC。我想你应该仔细看看在其他代码库中是如何抽象出的,以及如何处理模块化,并考虑如何处理可能出现在Web开发中的事情。

如果我想在每个控制器之前运行一些代码,该怎么办?还是在请求和控制器之间运行的中间件?或者在处理每个控制器之后向视图中注入一个变量?你如何分离POST,GET,PUT,DELETE逻辑,但仍将它们分组在资源中?其中的一些可以通过您的架构来实现,但我认为许多解决方案在使用类级架构时会更清晰。当然,更清洁的东西在旁观者眼中。

发布给公众的框架尽量是通用的,并尽可能多地处理用例。我看到的一个问题是,你假设控制器文件将被最后调用,然后设置视图。因此,即使其中的逻辑处于全局状态,它也只存在于该文件中。本质上,该文件充当命名空间。我不认为这是一个通用的Web框架应该做的假设,但是当你为自己写点东西的时候,这是你可以避开的东西。

+0

这确实有助于更清楚一些事情,谢谢@Jongynu。我想我的第一个错误是试图比较我为非常具体的使用情况开发的软件与已经开发的免费开放框架,这些开放框架涵盖了广泛的用例。 –