根据意图而不是架构构建程序 - Janos Pasztor

栏目: 后端 · 发布时间: 6年前

内容简介:在查看代码时,我经常会看到MVC模式:模型,视图,控制器,表单等文件夹。表面上看起来不错,对吗?您将控制器放在控制器文件夹中,模型文件夹中的模型等等。这对于像博客这样的小型示例应用程序来说相当不错,因为您可能有5个控制器,6个模型等等。但是,当您在更大的应用程序上工作,或者您遵循推荐谈话:

在查看代码时,我经常会看到MVC模式:模型,视图,控制器,表单等文件夹。表面上看起来不错,对吗?您将控制器放在控制器文件夹中,模型文件夹中的模型等等。这对于像博客这样的小型示例应用程序来说相当不错,因为您可能有5个控制器,6个模型等等。

但是,当您在更大的应用程序上工作,或者您遵循 一个控制器 的概念  ,一个action时 ,这些文件夹中的这些文件数量会迅速升级,并成为命名问题的混乱。

推荐谈话: 罗伯特“鲍勃叔叔”马丁 - 建筑:失落的岁月

我们来看一个社交媒体项目的例子。你有Walls,WallPosts,评论,PrivateConversations, PrivateConversationMessages以及更多东西。使用“经典”排列,我们将拥有相当大的目录树,即使没有前面提到的方法:

SRC
调节器
WallController
WallPostController
CommentController
PrivateConversationController
PrivateConversationMessageController
模型
WallModel
WallPostModel
CommentModel
PrivateConversationModel
PrivateConversationMessageModel
视图

...

这只是一个简单的例子,在现实世界中的应用程序,你就会有很多更多的控制器,模型和视图。如果根据应用程序的构造(模型,视图,控制器)进行构建,则在某个奇点之后,目录结构将变得完全无法使用。

当然,您可以使用IDE的搜索功能,但是重载的目录结构会导致您感觉有太多的类。这种感觉反过来导致害怕添加新类,您的开发人员会尝试将新功能填充到现有类中,即使它不严格属于那个类,从而导致很多 单一责任原则违规 。此外,这种结构使得团队中的新开发人员难以了解什么是什么。

基于意图的结构

如果我们仔细观察我们的控制器,我们可以在属于一起的东西和不属于哪些东西之间绘制线条。例如,从商业角度来看,Wall似乎是一个非常明确的概念:人们可以拥有一面墙,在上面写帖子和对所述帖子发表评论。因此,让我们将与墙相关的所有内容放入一个文件夹中。类似:

[b]src[/b]
<p>[b]wall[/b]
CommentController
CommentModel
WallController
WallPostController
WallModel
WallPostModel
<p>[b]conversation[/b]
PrivateConversationController
PrivateConversationModel
PrivateConversationMessageController
PrivateConversationMessageModel
...

仍然不是很好,但更好。现在可以扩展目录结构而不必担心太多的类,如果我们正在寻找一些东西,我们可以在哪里找到它。

在我们继续之前,让我们澄清一件事:这些“模块”不是独立的。有时,如果您希望单独发布模块,它们可能具有可能需要解决的交叉依赖性,但这是另一篇文章的主题。

您可能会注意到,现在模块中的所有内容都被拿出到另外一个目录中。这很好,因为它(希望)会阻止你在一个模块中添加太多东西。但是,如果你像我一样,你仍然喜欢有一些结构构建块,所以让我们带回以前的目录结构,但是低一级:

SRC
wall
 控制器 
   CommentController
   WallController
   WallPostController
模型
  CommentModel
  WallModel
  WallPostModel
视图
...
会话
...

易于浏览和易于阅读的代码块。当然,您可以在您感觉舒适的同时,以层次结构的方式继续添加业务结构。我建议你将它保持在3-5级以下,以便轻松导航。

提示: MVC不适合作为您的总体设计模式。相反,我建议看一下 Entity-Boundary-Interactor

总而言之,您最外层的文件夹结构应该基于业务概念(意图),而不是您选择使用的设计模式。​​​​​​​


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

腾讯产品法

腾讯产品法

李立 / 浙江大学出版社 / 2018-1 / 49元

从QQ到微信,从《英雄联盟》到《王者荣耀》,腾讯公司凭借强大的产品力成为世界互联网企业中的佼佼者,其“小步快跑,试错迭代”的产品开发机制,“别让我思考”的极简主义理念,“变成白痴级用户”的用户驱动战略,都成为整个中国互联网行业竞相学习的典范。 本书向读者完整地呈现了腾讯产品设计的底层思路,阐述了设计者如何发现问题、定义问题、拆解问题的全过程,从“产品思维”出发,以需求、战略、产品设计开发与运......一起来看看 《腾讯产品法》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具