三层结构中自定义实体的方法如何访问数据层?

czwdmj 2006-12-07 11:54:02
如题,我采用三层结构来开发一个应用,其中有DataAccess数据访问项目、Model自定义实体项目等等。Model项目需要被业务层和数据层依赖。现在的问题是:Model中的一个自定义实体,比如User这个类,要为它添加一个UpdatePassword方法,而这个方法需要调用DataAccess数据层中的函数,但又不能添加对DataAccess项目的依赖(因为这会造成循环依赖),那么应如何实现UpdatePassword这个方法呢?

另外,这样的话,是否符合三层结构的原则?有更好的解决方案吗?
...全文
2307 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
戒焦戒躁 2006-12-19
  • 打赏
  • 举报
回复
实体类只定义基本的属性以及不涉及数据访问的方法。再在业务层建立一个相关的类来实现数据访问相关的方法。
czwdmj 2006-12-12
  • 打赏
  • 举报
回复
另外想顺便问个相关问题:在这种三层结构中怎样处理系统的公共变量比较好?比如,我想把数据库中保存的系统设置信息以HashTable的形式保存以方便引用,这个HashTable以哪种方式保存在哪一层比较好呢?
veryhappy 2006-12-11
  • 打赏
  • 举报
回复
UpdatePassword放到业务逻辑层中
gwallan 2006-12-11
  • 打赏
  • 举报
回复
mark
yjwang0621 2006-12-11
  • 打赏
  • 举报
回复
晕了
Aricc 2006-12-11
  • 打赏
  • 举报
回复
同意czjearth(czj)的方法
自然框架 2006-12-11
  • 打赏
  • 举报
回复
修改密码,只不过是要修改数据库里的用户表里的一个字段罢了。

一个SQL(update usertable set pwd = '' ......)语句就ok了,怎么这么复杂了呢?

feifeiyaqi3 2006-12-11
  • 打赏
  • 举报
回复
这是petshop程序网上很多的看看
sunbird69 2006-12-10
  • 打赏
  • 举报
回复
up
billow_chentao 2006-12-10
  • 打赏
  • 举报
回复
up
Bluesky51 2006-12-10
  • 打赏
  • 举报
回复
ok
zssxfc 2006-12-09
  • 打赏
  • 举报
回复
mark
I_Iverson 2006-12-09
  • 打赏
  • 举报
回复
用所谓的贫血的实体模型可以解决这个问题。
就是只包含数据的实体。

否则如果自己写的话真有双向依赖的问题,就算抽取一个IDalUser,IDalUser和User类
也存在双向依赖
killlkilll 2006-12-09
  • 打赏
  • 举报
回复
我认为Model 层应该反映描述对象的特性,而不是行为,应该行为放在业务逻辑层去进行处理,承接楼主的意思,User 类应该反映用户的信息,我成为ModelUser,而在业务逻辑层的User(LogicalUser)是基于ModelUser 的。

或者楼主,可以这么想,不用User作为例子,用Gallery 和 Photo 作为例子,由于Gallery必须包含Photo , Photo必须在Gallery 里面,因此他们是关联的,最好在业务逻辑层有一个LogicalGallery进行管理,否则,你既要维护Gallery和Photo太累了
冯唐李广 2006-12-09
  • 打赏
  • 举报
回复
我也为这个问题迷惑!
不过我比较赞同yzwgh(大梦)所说的:
所谓的三层实际上分为四个部分:表示层,业务层,数据层,域对象层(自定义实体).其中自定义实体通常只包含数据,也就是只有属性或者getter和setter,updatePassword方法实际上已经是业务了,所以应该放在业务层.
dingjian2008 2006-12-08
  • 打赏
  • 举报
回复
mark
liuzhanpeng 2006-12-08
  • 打赏
  • 举报
回复
上面有提到Castle中的AR,
Model里就实现了static方法,感觉也不错
yzwgh 2006-12-08
  • 打赏
  • 举报
回复
当然也不是不可以写在自定义实体里面,只是通常不会这么做,如果你非要加在里面而又要保持分层的合理性的话,可以用Ioc注入的方法:首先定义一个接口IUser里面加上updatePassword方法,然后在业务层定义类UserManager实现这个接口,接着为自定义实体添加类型为IUser的属性UserInterface和updatePassword方法,如:void updatePassword(){this.UserInterface.updatePassword();},在表示层调用的时候可以这么写:User user=new User();UserManager um=new UserManager();user.UserInterface=um;user.updatePassword();
yzwgh 2006-12-08
  • 打赏
  • 举报
回复
所谓的三层实际上分为四个部分:表示层,业务层,数据层,域对象层(自定义实体).其中自定义实体通常只包含数据,也就是只有属性或者getter和setter,updatePassword方法实际上已经是业务了,所以应该放在业务层.
Jacob_son 2006-12-08
  • 打赏
  • 举报
回复
有看头
加载更多回复(26)

62,266

社区成员

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

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

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

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