我们正在建立三层架构已有十多年了。划分表示层,逻辑层和数据层应该允许我们在需要时单独交换每个层,无论是通过变更的需求还是新技术。
我从未见过它在实践中发挥作用......
主要是因为(至少)以下原因之一:
因此,你通常最终得到的是一个整体的,紧密耦合的系统,它不能提供它所承诺的架构。
因此,我认为“三层架构”完全是用词不当。它带来的真正好处是代码在逻辑上是合理的。但那是在“写作时间”,而不是“运行时间”。一个更好的名字就像“责任分层”。无论如何,“架构”这个词会产生误导。您对此有何看法?如何实现工作三层架构?我的意思是承诺它的承诺:允许插入一层而不影响其他层。系统应该存活下来并且之后处于明确定义的状态。
谢谢!
答案 0 :(得分:5)
分层体系结构(逻辑层和物理层)的真正目的不是为了轻松替换一个层(这是非常罕见的),而是为了便于在其中进行更改一个不影响其他层的层(和as Ben notes,以促进可扩展性,一致性和安全性) - 它始终在我们周围工作。
答案 1 :(得分:4)
3层体系结构的一个示例是典型的数据库驱动的Web应用程序:
答案 2 :(得分:3)
在每个系统中,都有一个开头梦想的漂亮,优雅的架构,然后是最终生产的毛茸茸的混乱,充满了数百个错误修复和特殊情况处理程序,以及其他典型的令人讨厌的变化,以解决具体问题在设计过程中未实现的问题。
我认为你所描述的问题根本不适用于三层架构。
答案 3 :(得分:3)
如果你还没有看到它有效,你可能只是运气不好。我从事过一个Web服务(逻辑)服务于多个UI(演示)的项目。此外,我们通过配置(数据)交换数据提供者,因此我们可以在开发时使用低成本数据库,在更高环境中使用Oracle。
当然,总有一些重复 - 也许你在UI中添加验证以获得响应,然后在逻辑层再次验证 - 但总的来说,一个干净的分离是可能的,并且很好用。
答案 4 :(得分:2)
一旦你接受了n层的主要好处 - 即可扩展性,逻辑一致性,安全性 - 无法通过其他方式轻松实现,那么是否可以在不破坏任何层的情况下直接替换任何层的问题其他人变得更像是在问蛋糕上是否有任何结冰。
答案 5 :(得分:0)
任何操作系统都有类似的架构,否则它将无法运行。表示层独立于硬件层,硬件层被抽象为实现特定接口的驱动程序。使用根据正在读取的数据类型而改变的逻辑来处理数据(想想NTFS与FAT32对比EXT3与CD-ROM)。 Linux几乎可以在任何可以投射的硬件上运行,它仍然看起来和行为相同,因为层之间的抽象相互隔离,不受单层内的变化的影响。
答案 6 :(得分:0)
3层方法最大的实际好处之一是它可以轻松分割工作。您可以轻松地拥有DBA和业务任意列表或两个构建数据层,构建服务器端应用程序代码的传统程序员以及构建UI的图形设计器/ Web设计器。当然,这三个团队仍然需要进行沟通,但在大多数情况下,这样可以实现更顺畅的开发。在这方面,我认为3层方法每天都能可靠地运行,这对我来说足够了,即使我不能指望“可互换的部件”,可以这么说。