.net 开发代码结构 -Controllers、Services、Repositories & Contexts

Posted

技术标签:

【中文标题】.net 开发代码结构 -Controllers、Services、Repositories & Contexts【英文标题】:.net development code structure -Controllers, Services, Repositories & Contexts 【发布时间】:2011-05-23 23:49:36 【问题描述】:

作为一名新开发人员,我对使用最佳实践开发 c# 代码的命名和结构约定感到非常困惑。

我很欣赏它可能适用于我正在开发的每个领域,但我已经看到了许多不同开源项目的代码,并且似乎有一个共同的主题。成功的项目具有经过深思熟虑的维护和可扩展性结构。

上下文、服务、存储库和控制器这些术语经常被使用,我想知道这些术语是否可以解释,或者是否就使用什么、在哪里或如何使用它们达成共识或约定。

在我见过的电子商务平台中,有订单服务、订单上下文、客户存储库和产品控制器等。他们应该根据这些名称做什么?控制器做的事情与服务不同吗?什么时候应该使用上下文?命名空间有约定吗?当您尝试从用勺子喂食的新手开发人员那里推动并尝试继续前进时,这真是令人难以置信。

我真正应该使用哪些软件/工具来开发高质量的代码?单元测试、持续集成、Resharper、模拟工具、DOI 容器、nHibernate。

我真的不知道有哪些博客/书籍可以帮助我从一个精通网络开发人员发展成为可以开发可扩展、高质量和可测试代码的人。作者的假设存在很大差距。你要么是新手,要么是软件架构师。

我想从一名初级开发人员中脱颖而出,并以成为一名软件架构师为长期目标。我意识到这都是关于模式和实践的,但是培训材料在哪里?我自己工作,所以没有机会向别人学习。

谢谢

【问题讨论】:

【参考方案1】:

我认为您的答案没有完美的解决方案。我自己也糊涂了。但是根据我在工作和学校的经验,我制定了自己的规则。也许会给你一个关于你问什么的线索。

我假设您已经了解 MVC 设计模式。 Model 将在哪里处理您的业务逻辑和数据库的事情。视图是您希望在屏幕上看到的内容。控制器负责响应用户的请求并决定加载哪个视图和模型。

我通常通过创建一些文件夹(命名空间)来组织我的模型来实现它。这是我的模型:

存储库:只会做查询, 插入、更新和删除单个 表(接口和实现)。 服务:结合 基于存储库的表,做 登录和注销,以及其他一些 与数据库访问无关。 类:是声明的对象。 Utils:静态函数从 Repository 重定向,可以被 View 调用。

也许你可以分享你的!!

【讨论】:

+1 我会分享!我的Model 文件夹中有:PartialsProvidersRepositoriesViewsPartials 包含要传递给局部视图的基本模型和扩展模型。 Providers 和你的 Services 一样,我只是更喜欢这个名字。 Repositories 与您的 Repository 相同。 Views 包含要传递给视图的基本模型和扩展模型。独立类和数据容器(EF、L2S、nHibernate 或其他)是 Models 的根对象。【参考方案2】:

对于单元测试,有 NUnit。 对于持续集成,有 CruiseControl.net 对于模拟,有 Moq 或 RhinoMocks,我个人觉得 Moq 更简单,更容易学习。 对于 DI,有 Ninject、Structuremap 和其他一些,我更喜欢 StructureMap。这些是我用过的,通常有不止一种选择。

如果您想要一本可以让您了解 ASP.NET MVC、常见设计模式(如存储库模式)以及开发可测试代码的好书,我推荐 Pro ASP.NET MVC 2

至于您所说的命名约定,这是常见的领域驱动设计约定,很多人在 .NET 中使用或部分使用 DDD,您可以获取更多信息here。

【讨论】:

以上是关于.net 开发代码结构 -Controllers、Services、Repositories & Contexts的主要内容,如果未能解决你的问题,请参考以下文章

菜鸟笔记 一.net基础

求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?

大学中各科笔记总结(计算机专业,编译原理.NET应用开发数据库密码学计算机网络图像处理网络应用开发数据结构)

快速开发之代码生成器(asp.net mvc4 + easyui + knockoutjs)

.NET Web开发总结

大学中各科笔记总结(计算机专业,编译原理.NET应用开发数据库密码学计算机网络图像处理网络应用开发数据结构)