序言

时隔一年,弦哥重出江湖,对于我们学习.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. android中的数据库操作(转)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  2. Day11 - Mysql and ORM

    python 之路,Day11 - python mysql and ORM   本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 ...

  3. entity 实体模型timeout设置

    public Entities(): base("name=Entities") { var adapter = (IObjectContextAdapter)this; var ...

  4. Oracle oerr使用

    [oracle@cuug ~]$ oerr ora 01555 01555, 00000, "snapshot too old: rollback segment number %s wit ...

  5. iOS开发中EXC_BAD_ACCESS的另类原因

    今天偶然学习iOS开发的时候碰到一个EXC_BAD_ACCESS的异常,经查资料得到的解释是由于访问了已经被回收了堆内存对象导致的,参考: http://code.tutsplus.com/tutor ...

  6. Xcode换版本或者改名字后无法使用simpholders2

    修改一下路径,在终端下输入下面的命令sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer 敲回车后 ...

  7. Web学习资源及手册查询整理

    入门了解html.css.js.jQuery:http://www.w3school.com.cn/, bootstrap.nodejs.php.jQuery入门:http://www.runoob. ...

  8. [转载]__type_traits

    在STL中为了提供通用的操作而又不损失效率,我们用到了一种特殊的技巧,叫traits编程技巧.具体的来说,traits就是 通过定义一些结构体或类,并利用模板类特化和偏特化的能力,给类型赋予一些特性, ...

  9. 【转】K短路

    K短路 用dijsktra+A*启发式搜索 当点v第K次出堆的时候,这时候求得的路径是k短路.A*算法有一个启发式函数f(p)=g(p)+h(p), 即评估函数=当前值+当前位置到终点的最短距离g(p ...

  10. ubuntu 的远程桌面

    好久没有弄ubuntu 丢人的啊,先安装了个服务器版,发现好多命令都忘记了,命令行下根本搞不懂 又安装了个桌面版...但是服务器远程么,putty还是搞的头大,又乱码,有各种文件传输. 还好记得以前用 ...