客户端 - 服务器范例的三层软件架构有三个不同的层:
演示文稿图层 - 用户可以直接访问的图层,例如UI或网页。也称为客户端。
应用层 - 该层封装了业务逻辑(如业务规则和数据验证),域概念,数据访问逻辑等。也称为中间层。
数据层 - 用于存储应用程序数据的外部数据源,例如数据库服务器。
为什么将单独层的逻辑封装在单独的软件模块中是有利的?
答案 0 :(得分:5)
有几个原因你应该将单独层的逻辑封装在单独的软件模块中。
<强> 1。它迫使你练习分离关注/ SRP。
这匹马被打死了,所以我reference other StackOverflow questions。 如果你真的在不同的文件/模块中保持不同的关注,而没有太多的耦合,你将是一个更快乐的开发人员。直到你看到30,000行“神级”完成所有事情并且不可能添加或删除功能,修复错误或重构之前,你还没有看到地狱。
<强> 2。它可以帮助您将代码分解为可管理的块。
编码器已经将代码分解成不同的模块一段时间了,因为它有助于我们理解更大的图景。一旦系统超出小规模,您通常需要模块为您提供的结构和形容词,或者您需要与其他开发人员合作。
第3。它可以帮助将您的代码分发到不同的机器/架构上。
将您的软件放入不同的模块可以使将来更容易将它们分发到不同的机器(即分布式计算)上。如果模块没有共享状态且没有过度耦合,则可以将模块移动到不同的机器上。它不会自动执行此操作,您仍然需要处理接口(rpc / services / etc)和all the fun of distributed computing。
注意:如果过度使用模块,您可以轻松地回避所有这些好处。通常,您希望最小模块耦合遵循数据流的方向(即表示层不应与数据库通信)。
答案 1 :(得分:2)
很棒的回答,Alex。我还想补充一下:
<强> 4。它允许您构建多个客户端
想想像Facebook这样的应用程序。有一个Web应用程序,iPhone应用程序,Android应用程序等。当应用程序以这种方式分离时,开发人员只需要为iPhone,Android和任何其他新客户端“重新设置”应用程序。当单独的iPhone和Web页面与同一个应用程序层(例如通过REST)通话时,您可以确定业务规则在所有平台上的应用类似。
当您在应用程序中查看特定逻辑(编译HTML)时,您的新iPhone应用程序可能需要解决此问题,因为它不关心HTML。或者,如果您在视图层中使用了业务逻辑(对一系列数据执行多次计算),则新的iPhone应用程序很可能必须复制此代码;当计算需要改变时,将来会导致潜在的错误。