终极的Visual Studio解决scheme结构

意识到这可能是基于手头项目的主观,我正在寻找构buildVS(Visual Studio)解决scheme的“最佳实践”方法。

请随意编辑此内容,对您认为可能不正确的内容发表评论,build议替代scheme等。我很高兴看到这个社区维基成为刚开始使用VS Solutions的人们的一个很好的资源。

下面是我现在为我工作(在我目前的项目上),但是我知道有一些事情在错误的地方。 在我的场景中,我使用MVC 2构build了一个Web应用程序

请张贴您对最终解决scheme结构的想法,以便我们能够了解“最佳方式”/“最佳实践”( 无论如何意味着什么

IE:
你如何分解你的DAL(数据访问层)/ BLL(商业逻辑层)?
你把你的存储库层和服务层放在BLL里面吗? 如果你使用MVC(模型 – 视图 – 控制器),你把你的控制器在用户界面而不是核心?
你是否在你的Utility / Miscellaneous文件夹中扔了很多东西,还是把它分开了?
等等…


  • MySolution
    • MySolution.Core
      • authentication
        • 这是我有一个POCO和一个方法来将pocosearch到auth cookie的userData部分
      • 基础
        • 这里是我的BaseController和BaseGlobal
      • 控制器
        • 我的所有控制器(显然)
        • DatabaseModels
          • 包含我的L2S .dbml文件
        • JsonModels
          • 用于将JSON对象传递给veiw的模型
        • 服务
        • 的ViewModels
      • 扩展
        • 所有的扩展方法
      • filter
        • 动作filter
      • 公用事业
        • 蜜蜂
          • 所有的第三方API代码都在这里
        • 徽章
          • 徽章计算在这里
        • 的MailClient
          • 使用这里的类发送纯文本或HTML电子邮件
        • RoutingHelpers
          • 包含一个启用小写路由的类
        • 还包含我不知道要放哪里的东西… IE:HTMLSanitizer,自定义HtmlHelpers,UserInfo助手(IP地址,浏览器等),DataConverter等
    • MySolution.UI
      • App_Browsers文件
      • 资产
        • CSS
        • 图片
        • 脚本
      • 查看
      • Global.asax从BaseGlobalinheritance
      • Web.config文件

屏幕截图
核心UI

请随意评论,或者更好的,发表你自己的版本(答案)下面。 我知道我得到的不是最好的方法。

您的解决scheme/项目结构对我来说听起来很合适。 如果你从来没有看过S#arp Architecture ,你可能会想。 您的结构和S#arp架构之间的主要区别在于S#arp将控制器,服务和存储库分解为单独的项目。 这样做的主要好处是,对依赖关系执行边界变得更加容易(例如,您不会意外地从Core中的代码访问数据访问特定的库)。

除此之外,您的结构看起来与我倾向于用于我的项目的结构非常相似。 我还为扩展方法添加了一个“Extensions”文件夹,因为这些文件有时很难find一个好的地方。

好的维基。

我开始一个新的项目,这是我开始的结构。

它遵循Microsoft最佳实践(业务,数据,服务,演示)。

替代文字

在我的解决scheme:

  • 业务:领域/项目特定的逻辑,最值得注意的是POCO。
  • 数据:存储库。 自我解释。
  • 服务:存储库之上的逻辑。 我可以在这里添加caching,过滤等。我的UI通过服务,而不是直接到存储库通信到存储库。 (UI的一对一依赖)。
  • 演示:MVC应用程序(TBD)。

你会注意到我也习惯在FQN前面加上实际的项目组件名称。

我只是喜欢它的外观,再加上在对象浏览器中,它看起来很不错,并且“树状”。

另外我有一个习惯,把数字放在文件夹的前面,所以按“什么需要什么”来sorting。 换句话说,一切都取决于业务层(所以它的顶部),存储库只依赖于业务,服务依赖于存储库和业务,呈现取决于服务和业务等。

当然,以上是一个起点。 我现在所拥有的是一个存储库,它返回用户以及在其上应用逻辑的服务(过滤)。

最终,我将有更多的业务项目,更多的存储库(Web应用程序的每个逻辑区域一个),更多的服务(外部API的,集成),当然,我没有任何介绍(即时通讯TDD)。

我也喜欢所有在一个地方(项目文件夹)的依赖。

对于扩展,我有一个类(Extensions.cs)为每个项目。 换句话说,我是“扩展”存储库,或“扩展”用户服务,或“扩展”一些UIfunction。

对于testing项目 – 我有每个解决scheme项目的testing项目。

这是我的两分钱(为了什么值得)。

还有改进的余地。

我的任何解决scheme都有4个基本部分。 UI层,业务层,数据访问层和实用程序。 每个部分都是一个项目。

我的最终目标是永远不要在多个地方编写代码,而要重复使用它。

UI和数据访问是显而易见的。

任何特定于我正在处理的项目都将进入业务项目。

公用事业是我称之为共同的图书馆。 这些是我可以在许多项目中使用的好帮手function。 例如一个帮助logging的function。