选择正确的框架
Posted
技术标签:
【中文标题】选择正确的框架【英文标题】:Choosing the right framework 【发布时间】:2012-11-27 04:09:18 【问题描述】:我将构建一个应用程序,但我不确定要使用什么框架。在我工作过的地方,他们使用 Ntiers 和 codesmith,nettiers 是免费的,但不是 codesmith。我发现了实体框架,但我也读到了使用它的方法是使用一种叫做“存储库模式”的东西,但是对使用它有很多疑问。我没有很大的预算,只有我自己买不起一个昂贵的工具来自动创建我的类,更新、删除、创建功能并留下一些代码让我实现。所以我不知道该怎么走,我应该去实体框架(这是唯一一个免费的吗?),还是有其他我可以使用的东西,也许不是那么贵但可靠。
如我所料,我非常感谢您对此提出好的建议,最终此应用程序将不断发展壮大,并且希望易于维护。
PS:如果这是我的最佳选择,我会选择实体框架和存储库模式。
使用 C#、Asp.net 和 MSSQL 2008。
【问题讨论】:
.NET ORMs - ***.com/questions/1377236/… 我想指出,我为 CodeSmith Tools 工作,我们总是愿意与客户就定价问题进行合作。只需发送电子邮件 (codesmithtools.com/contactus) 即可。我们有 EF 模板,但它们不使用存储库模式。但是,您可以自定义模板/生成的代码以非常轻松地使用通用存储库模式。还有一句老话:可以为您节省大量时间的工具非常值得黄金价格。 【参考方案1】:带有code first and automatic migrations 的实体框架是您可以使用的最简单的 ORM 之一。它很灵活,在 Microsoft 堆栈中得到很好的支持,并且代码优先,这是开发数据库的最快方法之一。
首先使用实体框架代码,将数据模型定义为普通的 C# 类。这将对应于 Product 表:
public Product
public int Id get; set;
public string Name get; set;
创建数据库上下文。
public MyDbContext : DbContext
public DbSet<Product> Products get; set;
将连接字符串添加到 Web.config,并在包管理器控制台中运行命令:
>Enable-Migrations –EnableAutomaticMigrations
>Update-Database
您现在有了一个包含 Products 表的功能数据库。当您对类进行更改时,只需再次运行 Update-Database,它就会为您迁移架构。
添加新产品:
using (var db = new MyDbContex()
Product product = new Product() Id = 1, Name = "Tablet" ;
db.Products.Add(product);
db.SaveChanges();
查询您的数据变得如此简单:
using (var db = new MyDbContex()
// get product with id == 1
Product product = db.Products.Single(p => p.Id == 1);
至于存储库模式,它只是一个design pattern。有很多不同的variations of the repository pattern,但它实际上是将数据存储与数据访问层分开。这使得单元测试更容易,而不必依赖于存在的外部数据库。
编辑您的评论:有几种使用 EF 和存储过程的方法。请参阅Does Entity Framework Code First support stored procedures? 和Using Stored Procedure to Insert Data。
【讨论】:
非常感谢您的洞察力,一个问题,如果我需要创建一个存储过程来给我一些特定的数据怎么办,在这种情况下如何工作? 编辑了我的答案以添加有关使用存储过程的信息。【参考方案2】:我认为这完全取决于您作为开发人员的位置以及您想做什么。就成本而言,Visual Studio 中的 Entity Framework 是免费的。 Fluent NHibernate 与 EF 非常相似,它也适用于 Oracle、mysql 和 MSSQL 以及 you can get it 通过 nu get 超级简单。
存储库模式只是获取集合的模式。
我想说两种 ORM 各有优缺点。
【讨论】:
【参考方案3】:您可以选择的另一个列表是:
数据层:Ibatis.Net 或 NHibernate(大多数情况下我都使用了,NHibernate 用于 CURD,IBatis.NET 用于必要的查询,例如调用 SP,动态查询)。
Spring.Net:IoC 助手
Asp.NET MVC:MVC 框架。
好处是:IBatis、NHibernate 和 Spring.Net 与 Java 版本非常相似,所以你可以找到很多关于它们的文档。
我可以说的是,具有良好ORM(EF,Nhibernate或Ibatis)的3层是复杂项目的最佳实践,并且更易于维护和协作。如果您的项目非常简单,LINQ + WebForm 可以在几个小时内帮助您,您可以完全放弃 MVC。
【讨论】:
以上是关于选择正确的框架的主要内容,如果未能解决你的问题,请参考以下文章