在项目中,我有类 - 模型类(调用此类 - modelClass
)。
我有一个类(称为此类 - dbClass
),它提供了一些使用数据库的方法(db - Advantage数据库体系结构)。此类提供用于处理数据库的静态方法。我知道我可以使用一些ORM(如EF),存储库模式,但在这个项目中使用数据库的主要思想是使用静态方法的静态类。
在modelClass中,我有thi字段 - “Status
”(字符串类型)。
当我设置字段“Status
”时,我的用例是数据库中的更新记录。
您可以在下面看到我的解决方案:
public class modelClass{
//here some fileds
public string Status { get; set; }
//here some fileds
}
public class dbClass{
//here some fileds and method for work with database
public static void update(modelClass mClass){
//here update the record in database
}
}
使用
....
modelClass.Status = "status";
dbClass.update(modelClass);
....
我提出了另一个解决方案。
我的决定是使用关键字“set
”。
让我解释一下我的想法 - 当我在modelClass中设置字段时,我想在数据库中设置字段和更新记录。
例如:
public class modelClass{
//here some fileds
private string Status { get; set; }
//create public setter
public string setStatus{
get { return Status; }
set
{
Status = value;
dbClass.update(this);
}
}
//here some fileds
}
使用
modelClass.setStatus= "status";
主要问题是:
答案 0 :(得分:2)
因此,您试图区分以某种方式映射到数据库的类以及业务逻辑使用的类。我认为这是一个好主意。 您正在考虑在域驱动设计中也会发现的元素,其中域名是“持久性无知”,即不知道它是如何,在何处或以何种形式存在被坚持下去。
但是,我认为有更优雅的方式来实现它。通过&包装'在模型类中的dbclass中,您可以在数据库中创建一个依赖形式,并且这正是您要避免的事情。
我所使用的是模型类,以及这些模型类的IRepositories。存储库的实现是了解持久性介质的实现。可以通过EF对抗SQL服务器,可能是Azure的东西。
如果发生更新,此repo将从数据库中保存dbclass,然后从提供的modelclass更新属性(如您所说)。例如,您可以使用AutoMapper来处理此映射。如果您的所有属性都具有相同的名称和类型 - 它只是一个单行:
OrderDto dto = Mapper.Map<OrderDto>(order);
答案 1 :(得分:1)
不,这不是好习惯。
有两个原因:
通常,ORM实现有一种遍历所有属性的方法,例如,使用反射。
此外,它还有一个'save'方法,以便您在完成分配字段后可以在一次调用数据库中刷新值。