【译】组织好你的Asp.Net MVC解决方案
最近,Twitter上发起了一个一个关于“你最爱的Asp.net MVC项目组织方式”,我自己研究了一些组织项目文件的方法。而我现在一直喜欢用的方式是一个几句灵活性的方式,此外,这个方式还非常简单。
如上图,整个解决方案里只有两个项目,首先让我们来看UI项目,UI项目只包含了那些和Website相关的文件并且不包含任何后台代码,这包括:
- 没有Controller
- 没有Model
- 没有Global.asa.cs
- 不包含任何后台代码
为什么不包含后台代码?因为UI项目只包含那些和UI相关的文件,而我的UI项目和部署项目相匹配,这包括
- Views
- Css
- Images
- Global.asax
- Web.Config
- 引用Core项目
因为我的UI项目和部署结构相匹配,所以弄清楚开发是怎样工作的将会变得容易.反之,将Model和Controller混合起来将会使得开发中将各部分分开变得困难。所以我的组织方法会将代码和内容这两部分分开。
我们的代码部分怎么办呢?放到另一个项目中,我喜欢称之为”Core”,当然名字你可以随便起,所有的代码文件都会放到这个项目中,包括持久层Model,View Model,Controller,repositories,ORM相关文件以及任何和后台代码相关的部分。
组织好你的代码
对于组织好的代码,我喜欢用简单的方式,如果可以的话,我宁愿不编译UI项目--这仅仅是一个用于存放内容的文件夹,而这个文件夹下的bin目录里只有来自于”Core”项目的dll。
另外,我喜欢用文件夹来组织代码。利用项目的方式组织代码是可以的,但是这种缺乏灵活性的做法会将你禁锢在很难改变的层和结构当中。我已经在大型项目中因为错误的组织代码而犯过许多错误,而最后我发现最好的做法并不是大兴土木,因为我曾经呆过的一个Team里动辄就是上百个项目,但是只有不到一半的项目被实际部署.所以要牢记,编译所需的时间很大程度上取决于你的解决方案中项目的多寡。在一个含有1000个文件的项目和100个文件放入10个项目中比较,前者所需的编译时间要大大的小于后者。至少在我见过的项目中是这样。
而另一个实际的问题是当你需要重新组织你现有的代码时,你会发现对于包含N个项目的解决方案来说,发现你被禁锢在各个不同项目的结构中会让你捶胸顿足。此外,这种方式在Ctrl+F5进行调试时,超慢的速度更会让你欲哭无泪。而这种方式在你的代码被源码管理软件管理时,更会显出不足,仅仅将一个文件从一个项目中移到另一个项目中就会让你的历史记录暴涨。在我最近的一个项目中,情况已经发展到甚至我们连一个简单的源码控制指令都无法执行从而导致我们所有的源码控制历史记录全部丢失,最后我们不得不重新手动创建整个项目。移动文件夹要比在项目中移动文件让人惬意很多…
如果你想将你的代码进行很好的组织和分层,使用项目的方式或许有些帮助,因为这强制让你遵循你自己一开始设定的规则,但是一旦你开始这样做,你设立了”Common”项目,”Configuration”项目”,”mapping”项目等,在后面的开发中最好考虑将这些代码回归到同一个项目当中.
所以,为什么不考虑将所有代码放入一个Core项目,所有UI放入一个项目,从而能给你极大的灵活性和最快的编译速度呢?无论你准备何种构架来组织你的代码,请确保不要将后台代码放入UI项目中,这样才能避免将代码和内容的关注点分离结构混为一谈。
-----------------------------------------------------
原文链接:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/12/08/organizing-asp-net-mvc-solutions.aspx
转载于:https://www.cnblogs.com/CareySon/archive/2009/12/12/1622679.html
【译】组织好你的Asp.Net MVC解决方案相关推荐
- [译]Profile and debug your ASP.NET MVC app with Glimpse
原文: http://www.asp.net/mvc/overview/performance/profile-and-debug-your-aspnet-mvc-app-with-glimpse G ...
- 【译】ASP.NET MVC 5 教程 - 4:添加模型
原文:[译]ASP.NET MVC 5 教程 - 4:添加模型 在本节中,我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演"Model"的角色. 我 ...
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part1
从开发者的角度来看,创建Asp.net MVC的View是一件很爽的事,因为你可以精确控制最终生成的HTML.具有讽刺意味的是不得不写出每一行HTML代码同时也是Asp.net MVC的View中让人 ...
- 【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链 (转)
你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你的服务器带宽.下面这种方法可以告诉你如何在ASP.NET MVC中实现一个自定义Ro ...
- 【译】详解Asp.net MVC DropDownLists
Asp.net MVC中的DropDownLists貌似会让一开始从Asp.net Forms转过来的程序员造成不少迷惑.这篇文章讲述了为了使用DropDownLists,你需要在Asp.Net MV ...
- [译]Chapter 1 - An Introduction to ASP.NET MVC(2)
原文地址:Chapter 1 - An Introduction to ASP.NET MVC Avoiding Code Smells 如果你不是很小心,软件程序很快就会变得很难对应变更.我们都曾经 ...
- Pro ASP.NET MVC 3 Framework 译文(一)
ASP.NET MVC3简介 2011年10月22日 12:49 对于使用微软平台的开发人员来说,ASP.NET MVC框架有了一个根本的转变.它强调"干净的"体系.设计模式.可测 ...
- 一起谈.NET技术,专访微软MVP衣明志:走进ASP.NET MVC 2框架开发
日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭 ...
- 成员资格、授权 – ASP.NET MVC 4 系列
ASP.NET MVC 不像 ASP.NET WEB FORMS 那样提供了很多自动保护机制来保护页面不受恶意用户的攻击,更明确的说,后者是致力于使应用程序免受攻击: 服务器组件对显示的值和特性进行 ...
最新文章
- MySQL中字段约束有哪些_mysql字段约束
- android有用的知识
- pcie的ack/nak机制
- java包装器类_Java中的基本类型和包装类
- OSX操作技巧:快速锁定系统(类似Windows+L)
- C#多维数组与嵌套数组
- Hey, Apple | Decode the Week
- Kubernetes-Service服务(十一)
- KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]
- 7月21日王者服务器维修,2020年7月21日王者荣耀世冠杯,GOG2:0EMC,实力碾压运营滴水不漏...
- C#Socket通讯之超时检测
- [数字dp] hdu 3271 SNIBB
- PXE网络装机和kickstart无人值守
- 毕设 JAVA北京旅游网系统论文
- womic网络错误_【无线麦克风(WO Mic)】无线麦克风(WO Mic)安卓版(Android)3.2下载_太平洋下载中心...
- C++初学 贪吃蛇项目
- 2012工行软开中心-广州面试
- Win8.1和Win10各自的优势
- 新闻学应该掌握哪些计算机技能,哪些人适合学新闻学专业 要掌握哪些技能
- CMOS反相器设计与仿真
热门文章
- u-boot移植随笔:继续使用svn进行版本控制(合并分支实例)
- 【clickhouse】clickhouse There is no DistributedDDL configuration in server config
- 【Elasticsearch】极限网关 INFINI Gateway 初体验
- 【Clickhouse】Clickhouse 运算符 操作符 算术,比较,取整,逻辑,哈希,条件 字符串函数
- 【Flink】Flink 消费 kafka报错 写入 es 死信队列 FetchSessionHandler DisconnectException
- 【kafka】kafka Offset commit failed on partition The coordinator is not aware of this member
- java.io.NotSerializableException: com.codahale.metrics.MetricRegistry
- 95-130-020-源码-source-SourceFunction
- NoSuchMethodError: org.apache.avro.Schema.getLogicalType()Lorg/apache/avro/LogicalType;
- 【Sentry】为什么Cloudera要创建Hadoop安全组件Sentry?