我想大部分的开发具有多层结构的概念。我们有DAL(数据访问层),我们有BLL(业务逻辑层)和附近的某处道路的尽头,我们有我们的UI。如果你有这在某种程度上遵循这些原则的一个项目,你保留(或至少尝试),以保持/把的东西,他们在概念上属于?我在你与许多其他人一起工作的大公司的应用特别感兴趣。显然,你可以做任何你想与您的私人玩具项目,创造任何种类的架构,并坚持下去。它也不是那么容易大项目,其中很多人造成了软件或整体一塌糊涂。

例如,我偶然看到的东西一样,直接到数据库的UI组件取的BL不提供一些“失踪”额外的数据,也都UI和BL低的水平元素,如表领域的工作,其中在我看来,他们应该委托这些操作在较低的水平,即DAL。当与高级开发家伙在讨论此后,我看见他没有看到这个问题是特别难过的。

我们当然可以假设我和谁分享我的观点只是作为完美主义者,但我清楚地看到了一个非常disadvantegous结果我花了长时间在我的一些任务来跟踪所有的“水货”路线数据被来往的数据库,并确定谁以何种方式现在可以通过新功能,我实现的影响。我看到它的方式,这些都增加了进一步的开发/维护成本增持一些积蓄,当有人决定尽快迅速破解的东西,并关闭任务。

您项目的“纯”或他们放弃饲养层很早以前之间的线条清晰的想法?如果你仍然保持它的权利,你如何处理与同事谁不明白这些东西,或不关心他们只是建立“定制”的解决方案和盗号黑客所有的时间?或者在某个时间点,你停止了与风车作战,并接受它作为你的惩罚? 编辑:有些诧异,没有多少人有兴趣的问题。是符号最不在乎?

有帮助吗?

解决方案

更复杂的我们的应用程序获取,关注更重要的分离变得

在100个klocs,该应用程序是一个大斑点,在表单类和其它地方尽可能多的业务代码,并调用到从业务类形式方法。由于大部分哀号和咬牙切齿,我们从显示逻辑上分离的业务逻辑。一个需要通知其进步的用户的任何类提出这是由UI沉没的事件。而且,有一阵子,万事大吉了世界。

约200个klocs,我们添加了一个数据层。我们的应用程序的体系结构是这样的,我们大部分的数据,因为它走了进来,立即丢弃被尽快处理。大多数配置信息存储在与我们共享一个共生关系的第三方应用程序。但是,设置已经开始在各种偏僻的角落里的积累。我们绕了三个配置管理系统,所有错综复杂交织成的业务逻辑。具有广泛的重写,我们能够分离出所述配置信息到它自己的层和流数据到另一个层的处理。

近250 KLOC线,我们决定结束我们与第三方供应商的关系,使我们的应用程序独立。我们开始了大规模的重写,并首次,加入一个实际的数据库到应用程序。因为我们有流信息,数据存储,和业务逻辑之间线条清晰,这是一个相当的无缝集成。

现在,接近500个klocs,我们正在应用程序以基于网格的结构。不仅将UI从业务逻辑在不同的计算机上分离,应用程序发出的报价和订单的实际计算将负载均衡和分散开来最大限度地提高效率。这将是不可能的,而不一个n层结构。

目前生长的每个阶段,我们或者通过一个干净的分离辅助或由我们自己的通信,数据,业务,和UI的混乱受到阻碍。有可能一直没有不是在创建该应用程序的分离更重要的问题。

其他提示

这是一个很大的问题!这是每一个ASP.Net开发人员需要思考的问题。你可能会得到很多答案,我会鼓励这些基本的常识性的想法。

- 考虑递送的简单性和速度为“成功”的体系结构的一部分,而不是仅仅“纯度”。抱着试试看到建筑的理想,并且是实用之间的平衡。

- 在一般情况下,它似乎很有道理,你提的代码进行分成层。我会建议虽然是针对特定页面的逻辑,它可以在页面左侧,如果是简单/更快 - 为什么要创建它只是在一个地方用于代码的通用业务对象。正如有人说“不成熟的优化是一切罪恶的根源。”

- 保持层和复杂性最小,以减少编码时间,提高可读性和可维护性

有关于该网站很多纯粹主义者谁愿意为架构的网站做的架构 - 利用架构作为一种工具来提供解决业务问题,而不是只是一种艺术形式,它自己的缘故,让它成为一个有用的工具,而不是使用你它。

请关注独立。这是非常非常重要的。与商务和商务与数据层不要混用UI。用抽象的工作。与抽象一起工作,也使得测试(单元测试)更容易(嘲笑他们)。我严格遵守它属于每一层。请记住,在任何项目中成本最高的是它的维修。如果混用的关注则修的是会成为一场噩梦。

我们有一个Winforms应用程序,和ASP.NET应用程序。他们都使用相同的业务对象的项目(约140班)。

在的Winforms项目包括约350形式和用户控制类,等极少数(<10)的这些需要关于他们自己的元数据从所述数据库中。

在ASP.NET项目具有约100 .aspx页。

我们有由5类,关注自己与ADO.NET,线程和事务的数据访问层。他们将来自Business Objects的请求到SQL Server的电话。

在UI层(与需要大约形式上浆元数据中的几个类除外)做没有数据库访问的。即使是少数例外经历任何事情一样的DAL。

在业务层一无所知数据访问层的内部工作,而当它需要的数据,永远只能呼吁DAL类的公共方法。

我不是在所有的原教旨主义者,当谈到这样的事情,但我们从来没有需要削减在这一个角落。

因此,在短期,100%纯的。它只是一直摸索出更好的把它做好。

我们不得不有一个很好的理由地狱到现在离这个移动。

代码猴子和纯粹主义者的人很像在生活中的任何其他极端。

我们有极端右翼和极左翼。很少有人确切地一个或另一个,他们找到一个很好的中间地带他们坐在那里。如果它不是为极端分子,我们不知道界限在哪里躺下。

至于方式予代码去。我听这样做的较真的方式。我看到代码猴子去他们的方法。我用我的经验来选择一个中间地带,让我的灵活性和可管理适量与我需要产生它和钱,我究竟要得到这样做量的时间一起。

在代码越大,时间越长寿命,越不同的人对代码(包括同时或在寿命期间)在层中的更重要她分离工作。在开始的时候,它似乎是一个有点不必要的工作,但是从长远来看,它为自己支付几次了。

对于实施分离:这就是为什么你的首席程序员或技术架构师需要良好的软技巧,以及纯粹的技术技能。您可以尝试在技术上执行分离(见下文),但最终,你需要说服(或强迫)你的开发人员,以保持大画面干净。

但是,这并不是说,技术手段执行分离有没有用。事实上,我发现,确保“跨境所说的”有些难以作出会使人花费更多的时间去思考什么,他们真正需要的跨境接口,导致清洁接口。如果困难是技术不要紧,(因为你必须使用COM或CORBA)或其他的东西(你必须填写一式三份7页表格)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top