我对我的公司很陌生(2 周),我们正在使用 DotNetNuke 的 .NET 3.5 Team Foundation 为我们的系统启动一个新平台。我们的“建筑师”建议我们使用一个类项目。当然,我回想一下“三层”架构(业务、数据、Web 类项目)。
使用这种架构有什么缺点吗?专业人士将代码与数据分离,使类对象远离您的代码等。
我对我的公司很陌生(2 周),我们正在使用 DotNetNuke 的 .NET 3.5 Team Foundation 为我们的系统启动一个新平台。我们的“建筑师”建议我们使用一个类项目。当然,我回想一下“三层”架构(业务、数据、Web 类项目)。
使用这种架构有什么缺点吗?专业人士将代码与数据分离,使类对象远离您的代码等。
我想一个相当大的缺点是你必须为一个小项目编写、管理和维护的额外代码量可能只是过度杀伤力。
这完全取决于项目规模、最终项目的预期寿命和预算是否合适!有时,虽然“正确”做事很有吸引力,但做一些更“轻量级”的事情可能是正确的商业决策!
一个没有经验的团队往往需要更长的时间来构建 3 层。代码越多,错误就越多。我只是在扮演魔鬼的拥护者。
即使它是一个小项目,我也会努力推动 N 分层方法。如果您使用像 codesmith + nettiers 这样的 ORM 工具,您将能够快速设置项目并开发能够快速解决业务问题的代码。
当你开始一个新项目并且你花了几天时间坐在纺车上谈论应该如何构建“架构”时,这让我很生气。您希望花时间解决业务问题,而不是解决其他人为您解决的问题。使用 ORM(不管是哪一个,只需要选择一个并坚持下去)来帮助您获得最初的牵引力,这将有助于您专注于项目的目标,而不是分散您试图解决“架构”问题的注意力。
如果在一天结束时,架构师想要采用单一项目方法,那么您没有理由不能创建一个带有 BLL 和 DAL 文件夹的 app_code 文件夹来分隔代码,这将帮助您转移到一个稍后的 N-Tiered 解决方案。
因为您希望能够将层分布到不同的物理层(我总是使用“层”表示物理层,而“层”表示逻辑层),所以在将所有内容放入一个类之前应该三思而后行,因为你有如果或当您确实需要开始分发时,需要进行重大重构。
唯一的缺点是复杂性,但与使用数据集相比,添加一些域对象并绑定到它们的列表实际上有多难。您甚至不必创建三个单独的项目,您只需在 Web 应用程序中创建 3 个单独的文件夹,并为每个文件夹指定一个命名空间,例如 YourCompany.YourApp.Domain、YourCompany.YourApp.Data 等。
最大的优势是拥有更灵活的解决方案。如果您开始将您的应用程序编写为以数据为中心的应用程序,将您的 Web 表单页面与数据集强耦合,那么随着业务逻辑的复杂性增长,您将在稍后迁移到更以领域为中心的模型中做更多的工作。
也许在短期内,您通过创建非常简单的域对象并从数据集中填充它们来专注于一个简单的解决方案,然后您可以根据需要向它们添加业务逻辑并根据需要构建更复杂的 ORM,或者使用 nhibernate。
与任何抽象都会产生复杂性一样,因此应该适当地证明执行 N 层的复杂性是合理的,例如,N 层实际上是否有益于系统?将会有一些小型系统最适合 N 层,尽管其中很多不会。
此外,即使您的系统目前很小,您也可能希望稍后为其添加更多功能——不采用 N 层可能会对您造成某种技术债务,因此您必须小心。