选择正确的框架

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。

【讨论】:

以上是关于选择正确的框架的主要内容,如果未能解决你的问题,请参考以下文章

MVP?MVC?移动开发如何选择正确的框架?

如何用ABP框架快速完成项目 - 如何正确使用ABP?

如何使用android存储访问框架正确覆盖文件内容

如何选择合适的 javascript 框架以及如何开始? [关闭]

带有 Vaadin 插件的 Grails,是正确的选择吗?

如何在多项选择(mcq)测验中显示正确/错误的符号