0

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

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

  1. 在 Team 的 DAL 中,创建一个 GetTeamDetailsByOrganisation 方法
  2. 在 Biz Object Team 中创建一个 GetTeamDetailsByOrganisation 方法,并调用我刚刚创建的 DAL 方法
  3. 在 Team 的 BAL 中,将 Biz 对象 Team 的方法包装在另一个方法中,可能名称相同,GetTeamDetailsByOrganisation
  4. 页面控制器类调用 BAL 方法。

就是感觉不对。任何好的做法或模式都可以在这里解决我的问题。

4

1 回答 1

0

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

如果项目主要处于维护模式,没有添加任何新功能,我可能会接受事情就是这样。尽管听起来您至少添加了一些新功能。

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

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

这不太可能适合您的场景,但也有可能采用某些功能子集并将它们分离到单独的服务中,这些服务可以使用更好的平台和模式进行重写。如果需要,旧代码库可以在服务层进行互操作。您可能在某些领域进行的更改比其他方面更多,因此重大更改的领域可能是转移到专门服务的首要任务。这样做的好处是允许您创建现代代码库,而不必一次从头开始重写整个应用程序。Netflix 采用这种策略来重写他们的平台并将其迁移到云端。

于 2011-06-02T16:13:18.237 回答