如何确定业务对象状态 - .NET,NHibernate

时间:2011-02-14 15:41:05

标签: .net object nhibernate

在我的ASP.NET MVC + NHibernate应用程序的开发过程中,我遇到了困难(对我来说)问题。

在我的项目域中我有对象,我们称之为“文章”(比如在BBC网站上或类似的东西)。本文由几个属性描述:

-author -创立日期 -IsTemp -IsApproved

这些对象可以处于几种状态:

  • Temp - IsTemp == true,其他一切都不重要
  • 已批准 - 已批准== true
  • 待定 - IsTemp == false&& IsApproved == false&& CreationDate + 10天> DateTime.Now
  • 已过期 - IsTemp = false&& IsApproved == false&& CreationDate + 10天< DateTime.Now

(以上描述只是一个例子 - 我的域有点复杂,但问题是相同的)

这就是问题:我应该何时检测文章状态? 我希望用户能够列出例如所有批准的文章等。

  • 我应该每隔10分钟使用后台处理来更新所有文章的状态吗?这对我来说有点臭。
  • 我应该使用我的Article类(方法GetState还是什么?) - 然后我失去了通过HQL查询状态的能力,并且我强迫从DB获取所有实体以执行分页和发现状态
  • 我应该准备特定于州的查询吗? (Repository.GetAll(State.Temp)) - 这个也很臭,因为我不希望我的业务规则(可以改变/扩展)泄漏到我的DAL层。
  • 我应该扩展扩展NHibernate功能吗?我从来没有这样做,所以我不知道这是不是真的。

这对我来说是个大问题。有什么想法吗?

祝你好运, Karczas

2 个答案:

答案 0 :(得分:0)

查看状态机模式as implemented for example here

答案 1 :(得分:0)

每当其中一个州 - 源 - 属性发生变化时,我会重新计算状态。

例如,IsApproved property-setter会调用RecalculateStatus() method

'RecalculateStatus()'只应在状态发生变化时更改状态。 这样你就可以随时安全地调用'RecalculateStatus()'