关于Model数据实体层,欢迎大家来讨论。
请问大家是如何处理以下问题:
Model是数据库表的实体映射,当系统的需求出现新的变换,例如增加新的功能时数据库需要增加新的字段,
或需要去掉和更换某些旧的功能,那么对应的数据库字段肯定是会修改的。如果数据库的表结构有变换,
对应实体Model层肯定有变换。
改一个字段,
Model层必须要修改,
那么DAL层必须要修改,
SQL语句必须要修改,
表示层的数据展现也是依赖Model层的属性名称,也要修改。
这不符合设计模式的单一职责。牵一发动全身。
并且这样设计,那用啥设计模式都是白搭。
其次工作量非常大,例如商品表的话 光执行查询的地方就不得了。
请问大家是如何处理这种问题,或者怎么把影响降到最低。
------最佳解决方案--------------------我也有这样的困惑,关注
------其他解决方案--------------------其实只需要model变就可以了,其他都可以不用变的,
如增加model的语句,可以根据model的属性来动态生成一个sql语句
public string GetInsertQuery(string prikey, string tableName)
{
List<string> fields = new List<string>();
foreach (PropertyInfo pi in this.GetType().GetProperties())
{
fields.Add(pi.Name);
}
StringBuilder query = new StringBuilder("insert into " + tableName + "(");
StringBuilder value = new StringBuilder(" values(");
int index = 0;
int count = fields.Count;
foreach (string key in fields)
{
query.Append(key);
value.Append(prikey + key);
if (index < count - 1)
{
query.Append(",");
value.Append(",");
}
++index;
}
query.Append(")");
value.Append(")");
return query.ToString() + value.ToString();
}
------其他解决方案--------------------可使用LINQ
http://topic.csdn.net/u/20090926/11/af162995-f4f8-4660-bed7-3949f047bde3.htmlhttp://topic.csdn.net/u/20100207/09/237128f5-a14a-44e6-a2b3-6920bc6e9538.html