突然发现:Model的设计真的很蛋痛!!!!

leongF 2011-09-26 04:15:03
我发现一个奇怪的问题:
Model除了对数据库的表进行封装外(即一个model对应一个表,字段与属性相等),

应该还要根据业务对象来设计model.

但是我发现对于业务中的model设计很蛋痛:
比如在一个GridView要显示数据,这要三个表(或以上)的inner join 查询
那我是不是这样定义一个业务Model:
class 业务Model_1
{
表A中的某些字段
表B中的某些字段
表C中的某些字段
}

然后执行conn.IEnumable<T>query<T>(sql)返回IEnumable<业务Model_1>

如果这样的话,我得写多少个业务Model啊
特别是大项目,那是不是业务model写到手软啊

好吧,有人会说这样嘛:
class 业务Model_1
{
class A
class B
class C
}

可是这样的话,我只有一个Datareader 如何封装这个业务Model_1?

别说
业务Model_1 m=new 业务Model_1()
A a=new A();
a.XX=reader["XX"].tostring();
m.A=a;
我最烦就是这样的代码风格,没有自动化......


求当头捧喝、求指点......
...全文
1730 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
专注or全面 2011-10-07
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 yujiexiaoyu 的回复:]
引用 5 楼 return_false 的回复:
其实你可以根据各种Model组合出你想要的所有数据,而不是刻意的去增加没必要的Model


是啊。感觉LZ对三层架构的精髓没有理解。
[/Quote]


不妨说说你的解决办法,谢谢!
s_title 2011-10-07
  • 打赏
  • 举报
回复
首先要说的是,mvc 中的m,指的是业务模型,并非你指的数据库表映射。

其次,并不是数据库一个表,就需要一个model。 model跟业务对应, 并非跟数据表。

既然你需要这么样的数据试图, 你就是需要这样一个model。但是不一定需要到数据库找到相对应的表。

over。不晓得您懂了没。
木鱼- 2011-10-07
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 a410787073 的回复:]
大哥们 为啥不用DataTable呢。 占内存?慢?。。
[/Quote]

对啊,这样查询结果不是就可以,除要用什么MODEL,MODEL对单个表,修改删ORM实体类
chaochao6078 2011-10-07
  • 打赏
  • 举报
回复
如果项目有比较复杂的业务逻辑,我个人处理的方法是将多张表建立一个View,不用单独为每个View再去建Model,麻烦,直接在在前端用Bll.GetViewList("ViewName",,,,)绑定视图,只需要几个参数就可以调用事先写好的分页存储过程..实现数据分页绑定在GridView或Repeater上面...
--缪军-- 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 bossma 的回复:]
不了解有多少业务Model需要创建,100个,200个?
[/Quote]
创建多少个业务实例,跟设计多少种业务类型完全两码事,
你能设计出50种业务类型就已经是很恐怖的事情了,
随着你接触的新业务类型越来越少,需要新开发的代码也越来越少,
项目的代码量不再随着项目规模增加,
这也是极限编程的两大"极限"之一:代码量极限
Yujiexiaoyu 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 return_false 的回复:]
其实你可以根据各种Model组合出你想要的所有数据,而不是刻意的去增加没必要的Model
[/Quote]

是啊。感觉LZ对三层架构的精髓没有理解。
jsjhcccn 2011-10-01
  • 打赏
  • 举报
回复
要不试试抽象工厂模式呢,把变化的部分隔离出来
萤火架构 2011-09-30
  • 打赏
  • 举报
回复
面向应用层面的开发 个人认为还是更关注应用更好些。
萤火架构 2011-09-30
  • 打赏
  • 举报
回复
采用视图是一种比较省力的做法。

针对业务创建Model,然后根据Model创建数据持久化层,这个路子更自然,建议了解下Code First。

不了解有多少业务Model需要创建,100个,200个?

有时候某些工作是很难省掉的。要么使事情变得更复杂,要么多干点体力活。

lookmai 2011-09-30
  • 打赏
  • 举报
回复
我在项目写了个动态实体类DynamicWrapper,完美解决了,支持各种绑定,和真实的实体类一样,不过要.net4和silverlight 4
public class DynamicWrapper : DynamicObject, INotifyPropertyChanged, IDataErrorInfo, IEditableObject
拉文麦克 2011-09-30
  • 打赏
  • 举报
回复
不觉得有什么问题,你可以继承,或者写个新的类
leongF 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 moneysoft 的回复:]
楼主你设计的根本就是不是Model,
你的代码里除了字段还是字段,没有看到任何业务描述,
哪怕你眼里只有最简单的CURD,也是可以从职责角度描述的,
就像这个样子:

C# code
public interface IOrdinaryModel {
Method MethodSearch { get; set; }
Method MethodIns……
[/Quote]

想想也是,你说得很中肯~
Jerry809 2011-09-30
  • 打赏
  • 举报
回复
29楼的,我个人认为可以用外键类来解决这问题...
a410787073 2011-09-30
  • 打赏
  • 举报
回复
大哥们 为啥不用DataTable呢。 占内存?慢?。。
骑猪看海 2011-09-30
  • 打赏
  • 举报
回复
说了那么多,谁举个例子来说明下多表显示时应该怎么做
andrewsway 2011-09-30
  • 打赏
  • 举报
回复
这个帖子看了好几次了,我觉得是你model设计的有问题,特别是实体关联这块
prince6635 2011-09-30
  • 打赏
  • 举报
回复
VS2010-Tools-Extension Manager-自己下载ADO.Net C# POCO Entity Generator! 自动帮你生成Db中所有表对应的Strongly-typed的Models
huayy 2011-09-29
  • 打赏
  • 举报
回复
我喜欢这个帖子及部分犀利的回复!
wsjrzjp 2011-09-29
  • 打赏
  • 举报
回复
不过楼主说的我能理解~因为最近我也遇到过这个问题。
CqCoder 2011-09-29
  • 打赏
  • 举报
回复
多表建立视图 as table 用吧
加载更多回复(27)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧