在下语文是体育老师教的,如若表达不清,请大家谅解。
直接举个例子吧!
比如说用户信息,由于用户的信息很多,于是按照业务需求分开存放:基本信息(Account)、联系信息(ContactInfo)、金融账户信息(FinanceInfo)(系统有充值交易的功能)等等。按上述划分成多个表来存储,这些表之间都是一对一的。并且创建了相应的数据模型类(Account、ContactInfo、FinanceInfo等等)。由于业务的需求,需要获取一个账户List,List中的Item不仅仅是Account,也可能包含ContactInfo或者FinanceInfo等等。请问这个情况下如何处理。
如果只需要获取Account,那就直接返回List<Account>;如果需要Account和FinanceInfo,可以返回ListKeyValuePair<Account,FinanceInfo>;如果需要三个或三个以上,这个方式就搞不定了。另外还有个办法,将其他的数据模型(ContactInfo、FinanceInfo)作为基本信息数据模型类Account的属性(字段),这样直接就返回List<Account>就可以了,但是这样有个弊端,每次获取Account的时候,都需要将ContactInfo和FinanceInfo读取出来,造成不必要的浪费。最后,我还想问一下,在实际操作中,出现这样的情况是不是设计的不合理?是不是最多应该只是需要获取基本信息Account+相应的业务信息(比如ContactInfo或者FinanceInfo)两个数据模型类?谢谢!
直接举个例子吧!
比如说用户信息,由于用户的信息很多,于是按照业务需求分开存放:基本信息(Account)、联系信息(ContactInfo)、金融账户信息(FinanceInfo)(系统有充值交易的功能)等等。按上述划分成多个表来存储,这些表之间都是一对一的。并且创建了相应的数据模型类(Account、ContactInfo、FinanceInfo等等)。由于业务的需求,需要获取一个账户List,List中的Item不仅仅是Account,也可能包含ContactInfo或者FinanceInfo等等。请问这个情况下如何处理。
如果只需要获取Account,那就直接返回List<Account>;如果需要Account和FinanceInfo,可以返回ListKeyValuePair<Account,FinanceInfo>;如果需要三个或三个以上,这个方式就搞不定了。另外还有个办法,将其他的数据模型(ContactInfo、FinanceInfo)作为基本信息数据模型类Account的属性(字段),这样直接就返回List<Account>就可以了,但是这样有个弊端,每次获取Account的时候,都需要将ContactInfo和FinanceInfo读取出来,造成不必要的浪费。最后,我还想问一下,在实际操作中,出现这样的情况是不是设计的不合理?是不是最多应该只是需要获取基本信息Account+相应的业务信息(比如ContactInfo或者FinanceInfo)两个数据模型类?谢谢!
{
public int ID { get; set; }
...
public ContactInfo Contact
{
return db.Contacts.Where(x => x.AccountID == this.ID).Single();
}
}
这样,只有你在使用account.Contact去访问的时候才会执行真正的查询。如果你要返回多个对象,可以试试看Tuple
和KeyValuePair不同,Tuple最多允许你组合8个不同类型的数据。
http://msdn.microsoft.com/zh-cn/library/system.tuple(v=VS.95).aspx
但是往往业务上需要返回的是账户的某几块信息,不单单是其中的一块信息。
所以一定是需要Account和其他信息的组合。
再或者用另外一种方法,Account、ContactInfo、FinanceInfo都是独立开来,先获取List<Account>,然后遍历的时候再获取需要的Contact或者FinanceInfo。
我具体点说吧,aspx调用bll,bll是直接返回把Account、ContactInfo、FinanceInfo打包好的List数据呢?还是bll创建3个返回list的方法和3个返回单个Model的方法,然后在aspx组合调用?
我可以很负责任的说,你们的设计其实是相当不错的设计问题不在设计师身上,问题反而在程序员身上。程序把PO认为是BO了,这是不对滴。从你的问题看,如果Bil认为需要有一个把3个组合起来的BO,那有啥问题呢?逻辑需要那就去做。老p认为的和我们没有啥不同,也不存在矛盾。一切以实际逻辑为准,实际逻辑如果一定需要一个组合对象,那么就组合一个对象,如果实际逻辑说其实很多时候不一定需要组合,那么提供3个单独的对外服务也没问题其实我们就一句话“不要纠缠非要从一而终的所谓实体,一切从对外系统服务出发,当把po弄成Bo的就弄,当需要vo那就给个vo”
提示:你想一下BO里一个对象,一部分数据在数据库里,一部分数据在xml里。 这时候你还号称什么数据模型对象做参数吗?那部分xml数据都根本不在你数据库里,你拿什么做参数??
按照您的意思,是不是应该bll和dal数据交换用po,而ui和bll之间交换用bo更合适?