如何构建适当的3层(无ORM)Web项目

时间:2011-06-02 11:47:54

标签: 3-tier

我正在处理遗留的Web项目,所以这里没有ORM(EF,Nhibernate)。 这里的问题是我觉得在实现新功能时结构很乏味。

假设我有商业对象团队。 现在,如果我想获得GetTeamDetailsByOrganisation ,按照项目中的当前编码风格,我需要:

  1. 在Team的DAL中,创建方法GetTeamDetailsByOrganisation
  2. 在Biz对象团队中创建方法GetTeamDetailsByOrganisation,并调用我刚刚创建的DAL方法
  3. 在Team的BAL中,用另一种方法包装Biz对象Team的方法,也许是同名,GetTeamDetailsByOrganisation
  4. 页面控制器类调用BAL方法。
  5. 感觉不对劲。任何良好的做法或模式都可以解决我的问题。

1 个答案:

答案 0 :(得分:0)

我知道你从类似的(可能更糟糕的)结构化项目中谈论的乏味。显然,这个问题有多个合理的答案,但这一切都取决于你的约束和目标。

如果项目主要处于维护模式而没有添加新功能,我可能会接受这就是事情的方式。虽然听起来你正在添加至少一些新功能。

是否可以使用代码生成器?我工作的一个项目有很多单调乏味,这显然是因为他们最初使用代码生成器的代码生成器而失去了时间。我最终重新创建了模板,这为我节省了大量的时间,理智和缺陷。

如果项目仍在积极开发中,那么执行某种大型架构更改是有意义的。我目前的项目目前属于这一类。我们正在解耦代码并添加存储库。这是一个缓慢的过程,需要整个开发团队的勤奋和纪律。每当一个团队拍摄一个故事时,他们就会重写该故事,并重写该领域的一些遗留代码。为了帮助实现这一目标,我们向团队的其他成员介绍了如何获得支持和理解。我们还为开发团队创建了一些文档,列出了要采取的步骤和需要注意的事项。在过去的6个月里,我们取得了很大的进步。我们没有你所说的重复,但我们有紧密的耦合问题,如果没有这个重构,单元测试是不可能的。

这不太适合您的场景,但也可能采用某些功能子集并将这些功能分离为可以使用更好的平台和模式重写的单独服务。如果需要,旧代码库可以在服务层进行互操作。您可能比某些区域更多地进行更改,因此重大变更的区域可能是转移到专用服务的首要任务。这样做的好处是可以让您创建一个现代的代码库,而无需一次性从头开始重写整个应用程序。这个策略就是Netflix在他们去的时候重写他们的平台并将其移动到云中所做的。