Ser*_*pia 4 .net c# design-patterns linq-to-sql
好吧,我总是试图改进我编码的方式,因为这是我的热情.我有一个.dbml文件(LINQ to SQL),我用它来访问我的SQL Server数据库.
想象一下,如果您愿意,您的数据库中有一个Person表,并且您希望提供一种删除,添加和修改Person记录的方法.
我正在处理事物的方式是创建名为PersonRepository,CarRepository,DocumentRepository等的类.对于我的数据库中的每个表,我创建了一个存储库类.
这些存储库类通常包含类似于此的内容:
MyDatabaseContext db = new MyDatabaseContext();
public Person GetPersonByID(int id)
{
return db.Person.Where(p => p.ID == id);
}
Run Code Online (Sandbox Code Playgroud)
每个表的基本CRUD功能几乎相同.
如果我需要更具体的内容,例如"塞尔吉奥,我需要列出所有在x和y之间出生的人"; 然后我只是将方法添加到PersonRepository类.
public List<Person> GetPeopleFromDOB(DateTime x, DateTime y)
{
// Do the logic here.
}
Run Code Online (Sandbox Code Playgroud)
我的另一个想法是创建一个DataAccess.cs类,并在其中包含所有这些方法(我们将讨论现有的每个表4-5个方法)并将它们按区域划分.
什么是知识渊博的程序员正在做什么,你会为一个热切的年轻程序员(我20岁)提供什么建议?
以下是您正在做的事情的问题:
在使用IQueryable时使用List
基本上,在您需要之前,您永远不应该获取数据.使用您的方法,您总是从数据库获取数据,随后的LINQ查询将对所有数据起作用.为什么不只是构建查询,让LINQ将事情细化到只有你需要的地方,并且只在你需要的时候?
扩展方法完善时使用方法
您正在使用GetPeopleFromDOB之类的东西创建一个实用程序类.为什么不把它作为一个扩展方法?如果你让所有这些都返回IQueryable,你也可以连续使用它们.例如GetPeople().StatusEnabled().BornInJuly().AgeIsGreaterThan( 57 ); ,如果你必须这样做,至少考虑在部分类或静态实用程序类中这样做.
考虑使用ActiveRecord/Repository Pattern作为根
http://compiledexperience.com/blog/posts/Implementing-an-ActiveRecord-pattern-in-Linq-to-SQL
现在你正在创建几个硬编码的存储库,但你应该将它们从存储库中删除?
为什么不使用验证器?
如果您正在使用ASP.NET MVC,则验证是部分和包裹,但是对于webforms,您也可以使用数据注释验证器.
http://adventuresdotnet.blogspot.com/2009/08/aspnet-webforms-validation-with-data.html
| 归档时间: |
|
| 查看次数: |
2649 次 |
| 最近记录: |