日期:2014-05-20  浏览次数:20617 次

关于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