【发布时间】:2013-12-06 23:50:06
【问题描述】:
我有一个正在使用 LINQ to SQL 的项目,并且我已经设置了要在我的 Web 应用程序中使用的业务对象/模型。我正在寻找一些关于我如何设置这一切的反馈,看看它是否有意义,以及是否有什么我应该做的不同的事情。
这是一个示例模型:
public class User
{
private MyDataContext _db = new MyDataContext();
private MyLINQUserClass _user = new MyLINQUserClass();
public string Name
{
get
{
return _user.Name;
}
set
{
_user.Name = value;
}
}
public User(int UserID)
{
_user = _db.Where(u => u.UserID == UserID).FirstOrDefault();
if (_user == null)
{
_user = new MyLINQUserClass();
}
}
internal User(MyLINQUserClass user, MyDataContext db)
{
_db = db;
_user = user;
}
public void Save()
{
_db.SubmitChanges();
}
public static User Add(string Name)
{
MyDataContext _db = new MyDataContext();
MyLINQUserClass _user = new MyLINQUserClass();
_user.Name = Name;
_db.MyLINQUserTable.InsertOnSubmit(_user);
_db.SubmitChanges();
return new User(_user, _db);
}
public static IList<User> Get()
{
MyDataContext _db = new MyDataContext();
return _db.MyLINQUserTable.Select(u => new User(u, _db)).ToList();
}
}
为了清楚起见,我在项目中已经大量使用了这种类型的模型(上面只是我为发布的帖子而拼凑的一个示例)并且效果很好。我的问题更像是一个“学习”问题......我知道它有效。我只是不确定是否有一些我应该做的更好的不同的事情,如果是,为什么。
想法?
【问题讨论】:
-
你做这些抽象只是为了实现一个 ActiveRecord 模式吗?
-
老实说,我并没有真正遵循任何特定的模式。我只是想将我的表示层、业务对象和数据对象分开。
-
我真的不喜欢像这样将实体与数据层混合。虽然它有效(如您所说),但您正在将数据逻辑发送到表示层。我宁愿有一个 poco 实体和一个单独的数据层,可能使用存储库模式。
-
虽然我同意 Mattias 不要将存储库模式与实体框架之类的 ORM 一起使用,但这只是对作为数据层抽象的 ORM 的不必要抽象。
标签: c# linq-to-sql separation-of-concerns