首页 / 知识
关于架构:命名空间/解决方案结构
2023-04-12 06:46:00

Namespace/solution structure很抱歉提出如此笼统的问题,但这对我来说可能具有挑战性。我的团队即将开始一个大型项目,希望将多年来发展起来的所有随机一次性代码库拖到一起。鉴于该项目将涵盖整个公司("客户"、"员工")、小任务、控制小任务的大任务和公用事业服务的标准化逻辑实体,我正在努力找出构建命名空间和代码结构。 虽然我想我没有给你足够的细节来继续,但你有关于如何合理地拆分你的域的任何资源或建议吗?如果有帮助,大部分功能将通过网络服务显示,我们是一家 Microsoft 商店,提供所有最新的小玩意和小工具。
我没有组织如此影响深远的项目的经验,只有一次性的,所以我正在寻找我能得到的任何指导。 有一百万种给猫剥皮的方法。然而,最简单的总是最好的。哪种方式对您来说最简单?取决于您的要求。但是我遵循一些一般的经验法则。 首先,尽可能减少项目总数。当您一天编译 20 次时,额外的一分钟就会加起来。 如果您的应用是为可扩展性而设计的,请考虑按照设计与实现的路线拆分您的程序集。将您的接口和基类放在公共程序集中。为您公司的这些类的实现创建一个程序集。 对于大型应用程序,请将 UI 逻辑和业务逻辑分开。 简化您的解决方案。如果它看起来太复杂,它可能是。合并,减少。 我的建议是,在开始类似的工作后,不要为命名空间而烦恼.. 只需根据一些重要的松散指南开始开发,因为无论您如何开始,您的项目都是有机的,随着时间的推移,您最终会重新组织名称空间和类。 不要浪费时间过多谈论您的项目。就去做吧。 我们将 .NET 中的程序集命名为 Company.Project.XXXX.YYYY,其中 XXXX 是项目,YYYYY 是子项目,例如:
我们从 Krzysztof Cwalina(作者)、Brad Abrams(作者)合着的一本名为《框架设计指南》的书中获取了这一点 我最近在工作中遇到了完全相同的情况。许多需要结构化和组织的临时代码。 一开始真的很难,因为太多了。我认为我能给出的最好建议是在周五下午放松的时候花时间在它上面,有几个星期我会选择一个应用程序/代码块,检查那里有什么,想想我们可以做什么通用,复制它,把它放到我认为应该放在的新库中。一旦我迁移了应用程序中的所有代码,我就会着手重构应用程序以从通用框架开始工作。这有时会导致需要修复的问题,但只要您彻底解决它就不应该太大不了。 一点一点,这是唯一的方法。 在结构方面,我试图模仿 MS 命名空间,因为在大多数情况下它非常合乎逻辑(例如 Company.Data 、 Company.Web 、 Company.Web.UI 等等。 主要好处之一可能是删除了大量的代码重复。是的,应用程序需要进行一些重构,但代码库要精简得多,并且在很多方面都"更智能"。 我注意到的另一件事是,我经常在试图弄清楚将东西放在哪里时遇到问题(在命名空间方面),因为我不确定它属于什么。现在这让我很担心,我认为它是一种难闻的气味。由于重组,现在一切都更好地归入空间。并且使用(现在非常少的)应用程序特定代码,它们被放入 Company.Applications.ApplicationName 这有助于我真正考虑更多的业务对象,因为我不想在这个命名空间中有太多,所以我想出了更多灵活的设计。 抱歉长篇幅.. 有点啰嗦! 对于大型项目,我喜欢采用的方法是为我的业务对象使用一个域命名空间,然后在需要存储和检索业务对象的层中使用数据传输对象 (DTO\\'s)。 DTO 是一个不包含任何业务逻辑的简单对象。 这是一个解释 DTO 的链接: http://martinfowler.com/eaaCatalog/dataTransferObject.html 包含大量项目的大型解决方案的编译速度可能会很慢,但更易于一起管理。 我经常将单元测试程序集与他们正在测试的程序集放在同一个解决方案中,因为您倾向于一起对它们进行更改。 |
最新内容
相关内容
python列表推导式的结构探究
python列表推导式的结构探究,培训,列表,结构,表达式,内容,括号,实例,后面,对方,根据,python列表推导式的结构探究1、列表推导式结构包含在一关于Java:大型Maven项目的存储库布
关于Java:大型Maven项目的存储库布局,关于Java:大型Maven项目的存储库布局,模块,结构,应用程序,类似于,Repository layout for large M关于Visual Studio:在具有多个项目
关于Visual Studio:在具有多个项目的解决方案中,如何将VS2008配置为仅打开一个Web服务器?,关于Visual Studio:在具有多个项目的解决方关于版本控制:帮助小商店在“ Joel
关于版本控制:帮助小商店在“ Joel测试”中得分更高的工具,关于版本控制:帮助小商店在“ Joel测试”中得分更高的工具,开发工具,支持关于c#:UrlEncode通过控制台应用程序
关于c#:UrlEncode通过控制台应用程序?,关于c#:UrlEncode通过控制台应用程序?,控制台,这是一个,我只会,cc,UrlEncode through a console app如何在FogBugz中添加“项目描述”?
如何在FogBugz中添加“项目描述”?,如何在FogBugz中添加“项目描述”?,项目,描述,当我,我看,How to add “Project Description” in F关于Java:何时应将多模块项目拆分为
关于Java:何时应将多模块项目拆分为单独的存储库树?,关于Java:何时应将多模块项目拆分为单独的存储库树?,布局,项目,分支,有一个,When sh关于注册表:如何从VS安装项目中注册
关于注册表:如何从VS安装项目中注册COM?,关于注册表:如何从VS安装项目中注册COM?,调用,应用程序,安装,在我,How to register COM from VS关于c#:.Net中是否有“Set”数据结构
关于c#:.Net中是否有“Set”数据结构?,关于c#:.Net中是否有“Set”数据结构?,并集,操作,折叠,模板,Is there a “Set” data structure in关于部署:如何部署SharePoint解决方
关于部署:如何部署SharePoint解决方案?,关于部署:如何部署SharePoint解决方案?,工具,计划,生产环境,解决方案,How do you deploy your Sh关于c#:关键值对数据结构的最佳实现?
关于c#:关键值对数据结构的最佳实现?,关于c#:关键值对数据结构的最佳实现?,数据结构,我想,让我,假设,Best implementation for Key Value P关于svn:学习并很好地学习版本控制
关于svn:学习并很好地学习版本控制,关于svn:学习并很好地学习版本控制,学习,版本控制系统,但我,使用过,Learning Version Control, and