实用体系结构:逻辑分层
Ted Neward
适用于:
.NET Framework
摘要:为什么我们就要使用 n(物理)层体系结构来构建系统?这是一篇基础性的文章,介绍了人们对于软件的一种理念,即当我们面对新项目时往往将系统明确地分为三个物理层次:表现层、业务逻辑层和数据访问或资源层。然而,对于循规蹈矩的做事方式应当重新审视。
有些事物是如此坚定地挺进了我们的通俗文化之中,以至于不发生灾难性的事故就无法将其摈弃,即使它们早已不能适应我们的生活。这样的例子在法律界比比皆是,在当今时代或其他时代美国的市、州甚至联邦政府针对无意义的书籍都有相关的法律(据说,在亚利桑那州的某个小镇上,在公路中间倒车是违法的)。这不禁使人联想到一个老笑话:
一个刚结婚的男人看到妻子正在准备晚餐要吃的烤肉。他吃惊地发现,妻子在将肉放到烤盘中前,分别在两端切掉了大约两英寸的肉,然后扔掉。而当男人对妻子的这一行为表示惊讶时,妻子回答道“这会使肉的味道更好。而且,我的妈妈也总是这样做”。他好奇地给岳母打了电话,问她是否也切掉烤肉的两端,以及这样做的原因。“因为这会使肉的味道更好。而且,我的妈妈也总是这样做”。男人决心找出这个习惯的源头,于是又给妻子的外婆打了电话,当外婆回答她在准备烤肉的时候也要切掉肉的两端时,男人又接着问为什么。外婆立刻回答说“因为我的盘子太小了,装不下整块肉”。
毫无疑问,对于这种明显的循规蹈矩的做事方式应当重新审视。但遗憾的是,其他情况并不都如此显而易见。
例如,为什么我们就要使用 n(物理)层体系结构来构建系统?这是一篇基础性的文章,介绍了人们对于软件的一种理念,即当我们面对新项目时往往将系统明确地分为三个物理层次:表现层,用以处理所有用户输入和数据显示问题;业务逻辑层,存放所有“业务逻辑”(本身是一个完全无定性的名词,可准确表示说话者希望其表达的意思);数据访问或资源层,存放用于检索、修改或存储数据的所有代码。当被问道为什么要这样做时,许多人只能说出最普通的答案,“因为我的老师(或前任主管或刚读过的一本书)总是这种做”。与普通的进程内调用相比,跨物理层通信会带来高达三到六个数量级的巨大性能成本,两者的差距就相当于一个是到楼下杂货店而另一个是到冥王星。(请参阅《Effective Enterprise Java》(有效的企业 Java)第 17 条)。仅仅因为妈妈总是这样做,我们就要丢掉好肉… 嗯 CPU 周期吗?
归根结底,请记住以物理分层的方式构建应用程序并不是开发人员的唯一选择。举个例子,想想 UNIX 开发人员早已熟知而 .NET 开发人员随着 Microsoft Windows PowerShell 的即将推出才开始领悟到的一个真谛:将小部件分割成可以互馈的片段