序言

时隔一年,弦哥重出江湖,对于我们学习.NET MVC那将有大大的好处,期待弦哥的重构系列。在弦哥与jerrychou的交流中提到了一篇文章http://lostechies.com/jimmybogard/2009/12/09/organizing-asp-net-mvc-solutions/  之前大概看过,稀里糊涂也没咋认真看,其实是英文实在不咋地,这次认真看了看把这篇文章翻译了一下,希望能给大家带来帮助。

LET'S GO (原文链接)

最近,在Twitter上提出了一个问题,在ASP.NET MVC项目中,你最喜欢的项目结构或者如何组织你的解决方案?在我周围就有很不同的策略来组织项目结构,我目前确定了一个能带给我很大灵活性的解决方案。它非常简洁:

仅此而已,两个项目。那么在每个项目中都有哪些东西呢?我们先看看UI层。我们的UI只包含网站的内容,并不包含任何代码。我只的是没有任何逻辑。指的是:

1)       没有Controllers

2)       没有Models

3)       没有Global.asax

4)       No code at all

为什么没有代码呢?因为当UI只包含用户界面的内容时,我的UI层现在匹配了配置架构。它包含了:

1)  Views

2)  CSS

3)  Images

4)  Global.asax

5)  Web.config

6)  引用Core项目

自从我的UI层匹配了我的配置架构,那就很容易搞清楚配置是如何工作的。把controllers,models等等这些混在一起,很难决定哪些该被配置哪些不需要。然后我们可以将其分成两个部门:代码和内容。

那么代码放在哪呢?我们放到另外一个项目。我们叫他“Core”层,即核心层,但是它里面可以放任何东西。所有的代码将在一个项目中,它包括我们的持久模型,视图模型,控制器,存储,定义ORM映射,任何东西。

组织代码

至于组织代码---我喜欢让事情简单。如果可以选择的话,UI根本就不需要编译,它纯粹就是一个文件夹,包含内容。它的bin文件夹里只包含core类库项目的输出文件。

另外,我使用文件夹来组织代码。用projects来组织也没问题,但是这样就太死板并且很容易把你局限在项目层次和结构中很难去改变。用我原来的项目架构,在大项目中犯了一些小错误导致被影响,并且发现这种方法没有按照一定比例。我甚至碰到过一个团队在解决方案中有100多个项目,仅有一半的项目被之际部署。别忘了,编译期在很大程度上是处理项目中的函数。一个项目中的1000个文件的编译速度远远要快于10个项目的100文件。至少我见过快一个数量级的情况。

我碰到的另一个问题是如果你被锁定在一个项目架构中就很难重新组织代码。此外仅仅是Ctrl+F5 ,如果你想将一个文件移动到另外一个项目,那么你还要考虑源代码控制历史日志,这点是令人相当沮丧的。在最近一次重新组织代码的经验中,我们基本上失去了整个历史日志。因为我们在重新组织代码时不能使用一些基本的源码控制命令。这样加重的原因在于我们使用源码控制系统如TFS时,由于实际项目文件中嵌入了源码控制信息导致。在我们的案例中,我们必须删除所有的项目并手动重新创建。相比项目和依赖来说移动文件夹是更容易的。如果您想要重新组织代码这点必须要注意。

如果你在代码库分层上有疑问那么建项目是最好的解决办法。它能很好的强制你引用依赖,迫使你遵守一些基本的规则。然而,在你开始创建“Common”类库项目,“Configuration”项目和“Mappings”项目等等项目时,一旦你领悟到这点,你就会考虑将他们移植到一个项目中。持续坚持下来的话,在日常工作中会产生代码冲突,从这点上看这样做似乎是不值得的。

那么为啥不只创建一个UI项目呢?将所有的代码放进去,你将获得绝对的速度和很大的灵活性体验。内容架构与组织代码具有完全不同的关注点。不管你打算如何组织你的代码,确保你的代码与UI分开并不要将代码和内容混合在一起。【end】

希望本文能给您带来帮助。

【翻译】Organizing ASP.NET MVC solutions 如何组织你的ASP.NET MVC解决方案的更多相关文章

  1. Asp.Net MVC学习总结(一)——Asp.Net MVC简单入门

    一.MVC简单入门 1.1.MVC概念 视图(View) 代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML.XML和Applet. 模型(Model) 表示用户对其数 ...

  2. ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

    一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 使用Visual Studio Code开发基于解决方案(sln+csproj)的项目 Visual ...

  3. 初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序

    初入码田--ASP.NET MVC4 Web应用开发之一  实现简单的登录 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查 2016-07-29 在此之前,需要一台电脑( ...

  4. ASP.NET MVC 4 (十一) Bundles和显示模式--asp.net mvc中 @Scripts.Render("~/bundles/jquery")是什么意思? 在布局文件中使用Scripts.Render()输出脚本包,Styles.Render()输出风格包:

    ASP.NET MVC 4 (十一) Bundles和显示模式 ASP.NET MVC 4 引入的js打包压缩功能.打包压缩jquery目录下的文件,在布局文件中使用Scripts.Render()输 ...

  5. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

  6. Creating a Clean, Minimal-Footprint ASP.NET WebAPI Project with VS 2012 and ASP.NET MVC 4

    Creating a Clean, Minimal-Footprint ASP.NET WebAPI Project with VS 2012 and ASP.NET MVC 4 Building O ...

  7. 学习ASP.NET MVC(七)——我的第一个ASP.NET MVC 查询页面

    在本篇文章中,我将添加一个新的查询页面(SearchIndex),可以按书籍的种类或名称来进行查询.这个新页面的网址是http://localhost:36878/Book/ SearchIndex. ...

  8. 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序

    学习ASP.NET MVC系列: 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器 学习ASP ...

  9. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

随机推荐

  1. Reso | Noise 网易云音乐插件

    源码地址:https://github.com/Simpleyyt/noise-neteasemusic安装方法:sudo add-apt-repository ppa:simpleyyt/ppasu ...

  2. Android Studio学习随笔-移动动画的实现

    在上一篇博客我已经讲述了三种事件的实现方法,而现在我用复用方法来实现控件的自动移动,当然要实现控件的移动,先得在activity_main.xml文件中放置一个控件,此处我放置的是一个button控件 ...

  3. 在/etc/password用户名前面加hello,ID前加is

    方法2: #!/bin/sh #set -x file=/etc/passwd while read LINE #for i in `cat $file` do #username=`echo $i| ...

  4. Android 连接 SQL Server (jtds方式)——上

    本文将介绍开发Android程序,连接SQL Server,通过第三方包jtds的方式. 如果你有同样的需求,请跟着做一遍,博主将以最详细的方式,进行介绍. 首先说明,Java.Android连接SQ ...

  5. 洛谷 1373 小a和uim之大逃离

    /* 很容易想到f[i][j][k][l][01] 表示到ij点 两个人得分为kl 01表示这一步谁走的 因为起点不同 路径不同 所以要枚举起点.. 时间复杂度 O(nmk*nmk) 空间复杂度 O( ...

  6. angular中ueditor插件的使用

    #在angularjs中使用ueditor编辑器需要注意事项: 在ui-view中使用放置ueditor的div,页面加载时编辑器在页面中是不显示的,需要通过指令手动replay 例: /** * u ...

  7. Linq101-Ordering

    using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Orderin ...

  8. Ubuntu12.4 64位 安装 arm linux gcc 4.3.2

    一.下载arm linux gcc 4.3.2 http://pan.baidu.com/share/link?shareid=1575352696&uk=2754759285&fid ...

  9. 分享Git的一些个人配置

    先贴上自己.gitconfig的相关命令,我再具体说一下 diff.external=~/.git-meld.sh http.sslverify=false http.proxy=http://127 ...

  10. 关于PHPstorm 使用技巧

    慢慢更新,一点点积累,都是自己在使用中遇到的问题 设置:(2016.4.15) 1:注释模板,phpstorm 有非常强大的注释模板,可以根据自己的需求随时更改,并设置快捷键,非常方便 新文件注释 P ...