Gle*_*enn 6 architecture n-tier-architecture
多年来我注意到不同的开发人员对n层系统开发中构成一个层的标准有不同的标准,所以我很想知道stackoverflow的共识是什么.
单独的逻辑层是否足以将其称为单独的层,还是必须可以在单独的服务器(物理或虚拟)上进行部署,以便将其称为单独的层?
让我用不同的方式说出这个问题.如果调用机制只能在进程中,线程本地或本地公寓,那么是否可以声称它是两个不同的层,具体取决于类如何组织到库或包中?
一个单独的逻辑层足以让我称之为层.它不一定必须位于单独的服务器上,但与其他层的定义分离肯定使其成为可能.
作为一个例子,我们曾经在一台服务器上运行我称之为3层系统(db,dll,asp页面).根据某些定义,这是一个单层系统.我们现在在单独的服务器上运行数据库,唯一需要的更改是连接字符串,但现在这是一个双层解决方案?
这就是为什么我觉得层的概念更多的是关于在不同的机器上运行它们而不是实际必须的能力.这对我来说似乎更加一致.
对我来说,物理层意味着系统的一部分,旨在在不同的物理机器上运行.是的,你可以随时将你的数据库连接字符串指向另一个服务器,但如果你的DAL过于繁琐,有n + 1和无限制的记录集问题,那么网络延迟会很快杀死你.
另一方面,逻辑层支持关注点分离,内聚和耦合的优点.严格来说它甚至不必在单独的程序集中 - 命名空间就可以解决问题.只是不要打电话,你知道你不应该,NDepend帮助你.