我很抱歉问了这样一个笼统的问题,但这对我来说可能是一个挑战。我的团队即将开始一个大型项目,该项目有望将多年来不断发展的所有随机一次性代码库整合在一起。鉴于该项目将涵盖整个公司的标准化逻辑实体(“客户”、“员工”)、小任务、控制小任务的大任务以及公用事业服务,我正在努力找出构建该项目的最佳方法。命名空间和代码结构。

虽然我想我没有给你足够的细节来继续, 您对如何逻辑地分割域有任何资源或建议吗?如果有帮助的话,大部分功能将通过网络服务公开,我们是 微软 购买所有最新的小玩意和小玩意。

  • 我正在讨论一种带有子项目的大型解决方案,以使参考更容易,但这会使其变得太笨重吗?
  • 我应该包装遗留应用程序功能,还是将其完全保留在命名空间中(制作一个 OurCRMProduct.Customer 类与泛型 Customer 例如,类)?
  • 每个服务/项目是否应该有自己的 BALDAL, ,或者应该是一个完全独立的程序集,所有内容都引用?

我没有组织如此深远的项目的经验,只是一次性的,所以我正在寻找任何可以获得的指导。

有帮助吗?

解决方案

剥猫皮的方法有一百万种。然而,最简单的总是最好的。哪种方式对您来说最简单?取决于您的要求。但我遵循一些一般的经验法则。

首先,尽可能减少项目总数。当您每天编译二十次时,额外的一分钟就会累积起来。

如果您的应用程序是为了可扩展性而设计的,请考虑按照设计与开发的路线拆分您的程序集。执行。将接口和基类放置在公共程序集中。为您公司的这些类的实现创建一个程序集。

对于大型应用程序,请将 UI 逻辑和业务逻辑分开。

简化您的解决方案。如果它看起来太复杂,它可能就是这样。合并,减少。

其他提示

在开展类似的工作后,我的建议是不要为名称空间而苦恼。

只需遵循一些重要的松散准则即可开始开发,因为无论您如何开始,您的项目都是有机的,并且您 将要 随着时间的推移,最终会重新组织名称空间和类。

不要浪费时间过多谈论您的项目。去做就对了。

我最近在工作中经历了完全相同的经历。许多临时代码需要结构化和组织。

一开始真的很难,因为有太多东西。我认为我能给出的最好建议就是 投入时间 在周五下午放松的时候,有几周的时间,我只会选择一个应用程序/代码块,检查其中有什么,思考我们可以通用什么,复制它,将其放入新库中,无论我想到什么地方它应该是。一旦我迁移了应用程序中的所有代码,我就会重构应用程序以在通用框架中工作。有时这会导致需要解决的问题,但只要您彻底解决,就不会有太大问题。

一点一点,这是唯一的办法。

在结构方面,我尝试模仿 MS 命名空间,因为在很大程度上它非常合乎逻辑(例如 公司.数据 , 公司网站 , 公司.Web.UI 等等。

主要好处之一可能是删除了重复的代码量。是的,应用程序需要进行一些重构,但代码库更加精简,并且在很多方面都“更智能”。

我注意到的另一件事是,我经常在尝试弄清楚问题时遇到问题 在哪里 放置东西(就命名空间而言),因为我不确定它属于什么。现在这个 真的 就我而言,我认为它是一种难闻的气味。自从重组以来,一切都更好地融入到空间中。并且通过(现在非常少量)应用程序特定代码,它们被放入 公司.应用程序.应用程序名称 这帮助我真正更多地思考业务对象,因为我不想在这个命名空间内有太多东西,所以我想出了更灵活的设计。

抱歉发了这么长的帖子..有点漫无目的啊!

我们在 .NET 中按以下方式命名程序集 Company.Project.XXXX.YYYY,其中 XXXX 是项目,YYYYY 是子项目,例如:

  • LCP.AdmCom.Common
  • LCP.AdmCom.BusinessObjects
  • LCP.AdmCom.Common.Dal

我们摘自一次图书电话会议 框架设计指南 作者:克日什托夫·奇瓦利纳(Krzysztof Cwalina)(作者)、布拉德·艾布拉姆斯(Brad Abrams)(作者)

对于大型项目,我喜欢采用的方法是为我的业务对象提供一个域命名空间,然后在需要存储和检索业务对象的层中使用数据传输对象 (DTO)。DTO 是一个不包含任何业务逻辑的简单对象。

这是解释 DTO 的链接:

http://martinfowler.com/eaaCatalog/dataTransferObject.html

包含大量项目的大型解决方案的编译速度可能相当慢,但更容易一起管理。

我经常将单元测试程序集放在与它们正在测试的解决方案相同的解决方案中,因为您倾向于一起对它们进行更改。

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