首页 新闻 会员 周边 捐助

如何避免破坏Model的结构,把Model来当做查询对象?

0
悬赏园豆:30 [已解决问题] 解决于 2015-10-28 10:08

场景如下,有一个Order表,假如只有OrderId(订单号)和WareId(商品id)两个字段,对应OrderModel实体如下:

public partial class OrderModel{
    public string OrderId { get; set; }
    public string WareId { get; set; }
}

 

现在有一个订单查询列表,有两个查询条件,订单号和商品名称(Order表中无此字段,查询时需要inner join 商品表),我的做法是修改ORderModel如下:

public partial class OrderModel{
    public string OrderId { get; set; }
    public string WareId { get; set; }
    public string WareName { get; set; }
}

从而把OrderModel当做查询实体,查询订单列表的方法假设是:

public DataTable GetOrderTable(OrderModel model);

方法中会遍历OrderModel的属性,当做存储过程的where条件。

我的疑问如下:

WareName并没有对应Order表中的任何列,随着其他条件的假如,最后OrderModel和Order表不再有一一对应关系,变得丑陋不堪。

我的解决方案是,当增加查询条件时,不修改OrderModel类,而是增加一个查询实体SearchOrder继承自OrderModel,在SearchOrder中添加WareName属性:

public class SearchOrder:OrderModel{
  public string WareName { get; set; }
}

这样查询方法变为:

public DataTable GetOrderTable(SearchOrder searchModel);

从而避免了修改OrderModel实体。

 

不知道各位对于此种问题,有没其他好的设计?

虞兮奈若何的主页 虞兮奈若何 | 初学一级 | 园豆:161
提问于:2015-10-22 18:43
< >
分享
最佳答案
0

如果要保证实体的独立性,就如你所说的用继承。就是会增大代码量,有时候为了简单,直接在实体里面添加,通过分块来标注,某一部分属性是哪个查询的。

收获园豆:20
幻天芒 | 高人七级 |园豆:37205 | 2015-10-23 09:05
其他回答(2)
0

其实也可以不用修改原有的Model对象类,在原有的方法加上一个参数就可以了。

public DataTable GetOrderTable(OrderModel model,string WareName);
CodeHsu | 园豆:5668 (大侠五级) | 2015-10-22 21:59

这种方式不能应对需要增加多个查询条件的情况。

支持(0) 反对(0) 虞兮奈若何 | 园豆:161 (初学一级) | 2015-10-22 22:47
0

可以考虑 dymaic 来设计,

public DataTable GetOrderTable(dymaic searchModel);

收获园豆:10
victor.x.qu | 园豆:220 (菜鸟二级) | 2015-10-23 12:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册