架构何时应该分层?

时间:2009-07-22 05:43:38

标签: language-agnostic

显然,“Hello World”不需要分离的模块化前端和后端。但任何类型的企业级项目都可以。

假设这些点之间存在某种频谱,应用程序在哪个阶段(概念上或在设计层面)应该是多层次的?当引入数据库或某些外部资源时?当你发现你在方法/功能中预期意大利面条代码时?

9 个答案:

答案 0 :(得分:7)

  

引入数据库或某些外部资源时。

但也是:

  总是(除了最简单的应用程序之外)将AT LEAST表示层和应用程序层分开

请参阅:

  

http://en.wikipedia.org/wiki/Multitier_architecture

答案 1 :(得分:3)

图层是保持设计松散耦合和高度凝聚力的意思。

当你开始有几个类(实现或只是用UML草绘)时,它们可以按逻辑分组,分层 - 或更一般地包或模块。这称为art of separating the concerns

越快越好:如果你没有尽早开始分层,那么你就有可能永远不会这样做,因为努力可能太重要了。

答案 2 :(得分:2)

以下是关于何时......

的一些标准
  1. 任何时候你都预料到需要 用一个替换它的一部分 不同的部分。
  2. 任何时候你找到 你自己需要分工 并行团队。

答案 3 :(得分:2)

这个问题没有真正的答案。这在很大程度上取决于您的应用程序的需求,以及许多其他因素。我建议阅读一些有关设计模式和企业应用程序架构的书籍。这两个是非常宝贵的:

Design Patterns: Elements of Reusable Object-Oriented Software

Patterns of Enterprise Application Architecture

我强烈推荐的其他一些书籍是:

The Pragmatic Programmer: From Journeyman to Master

Refactoring: Improving the Design of Existing Code

无论你的技术水平如何,阅读这些内容都会让你的眼睛真正开启可能的世界。

答案 4 :(得分:1)

我会说在大多数情况下,处理代码处理的概念中的多个不同抽象级别将是一个强有力的信号,可以在您的实现中反映抽象级别。

这并不会覆盖其他人已经突出显示的情景。

答案 5 :(得分:1)

我想一旦你问自己“嗯我应该分层”,答案是肯定的。

我参与过太多项目,这些项目可能最初是作为概念/原型的证明,最终成为生产中使用的完整项目,这些项目写得非常糟糕,只是“快速完成,我们将修复它后来。”相信我,你以后不会修复它。

实用程序员将此列为破窗理论。

尝试并始终从一开始就做好。分开你的顾虑。在构建时考虑到模块化。

当然,试着想想那些可能会在你完成后接管的可怜的维护程序员!

答案 6 :(得分:1)

从层数的角度考虑它是一个有点限制。这是你在产品的白皮书中看到的,但产品并不是真正起作用的。它们具有以各种方式相互依赖的“盒子”,并且您可以使它看起来像适合层,但是您可以在几种不同的配置中执行此操作,具体取决于您从图中遗漏的信息。

在一个设计精良的应用程序中,盒子变得非常小。它们可以达到各个接口和类的水平。

这很重要,因为每当您更改一行代码时,您需要了解您的更改将产生的影响,这意味着您必须准确了解代码当前的作用,其职责是什么,这意味着它必须是一个只有一个责任的小块,实现一个不会导致客户端依赖于他们不需要的东西的接口(S和I的SOLID)。

如果你眯起眼睛,你可能会发现你的应用程序看起来有两到三个简单的层,但它可能没有。这不是一个真正的问题。当然,如果你尽可能地眯眼,那么设计糟糕的应用程序可能看起来像层层。因此,“架构”的“高级”图表可以隐藏许多罪行。

答案 7 :(得分:0)

我的通用经验法则是至少将问题分解为模型和视图层,如果有可能有多种方法处理模型或将数据传输到视图,则抛出控制器。< / p>

(或者作为第一个答案,至少是表示层和应用程序层)。

答案 8 :(得分:0)

松散耦合就是最大限度地减少依赖关系,所以在引入依赖关系时我会说'layer'。即数据库,第三方应用程序等

虽然现在'层'可能是错误的术语。大多数时候,我通过Inversion of Control容器(例如Castle Windsor)使用依赖注入(DI)。这意味着我可以在我的系统的一部分上编码,而不必担心其余部分。它具有确保松耦合的副作用。

我会一直推荐DI作为一般编程原则,以便您可以选择如何在以后“分层”您的应用程序。

看一看。

[R