新足迹

 找回密码
 注册

精华好帖回顾

· GIRL WITH A PEARL EARRING 读后 (2005-5-26) 东食西宿 · 深深怀念已经因病过世的QQ并秀秀JACKIE最擅长的“忍”术 (2009-7-23) Devil_Star
· 总是忍不住吼孩子?来看看怒气背后隐藏的秘密! (2018-5-1) 苏一菲 · 夏威夷的过去时 (2012-6-13) yuxuanlin
Advertisement
Advertisement
查看: 1171|回复: 1

asp.net mvc的一个问题 [复制链接]

头像被屏蔽

禁止发言

发表于 2011-8-26 11:55 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
思考路线如下:
1. 首先因为sitemaster的缘故,所以设计mastermodel来容纳各个页的相同的model元素。
2. 因为1,所以各个不同的model会是mastermodel的子类
3. 由于那些相同元素的值是共享的,所以设计一个sharedvalues类,用来保存那些相同元素,然后各个model的建构函数都需要有一个下面这种样子的
public submodel(SharedMember shobj):base(shobj){}
public mastermodel(SharedMember shobj):base(shobj){}

4.基于以上思路,postback的时候可以再加入没参数的constructor.反正postback的model需要把值都更新到已经在session里面的对应的那个instance里面。

下面是问题:
1. 现在需要加入单元测试,因为单元测试,所以需要截断关联,所以需要用IOC,一般都用constructor传进去。
现在constructor已经定死了。
怎么办?

2. 我看了那个nerd dinner,他好像是把controller和model需要用到的外部调用都归拢到一个service类里面。
外部调用比如db, web.config里面的值啊, httpcontext啊等等。然后把这个service的interface给放constructor里面。这也算一种办法。有没有更好的?
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2011-9-9 10:39 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
更新:
1. 用base class来保存共享的参数是正确的

2. 因为MVC的特殊情况: model由postback和自行创建2种方式。所以我所想的用constructor传入或者依据某个已有的model来创建新的model已保证传递在session里的sharedobject是错误的方式。

解决方案有2种
1. 在base controller的OnActionExecuted()里面对base model的参数进行赋值或者创建。
2. 在custom model binder里面完成赋值

评分

参与人数 1积分 +3 收起 理由
+ 3 感谢分享

查看全部评分

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部