你正在使用你自己的版本的计算器:-)什么地方适合商业逻辑?
你正在使用ASP.NET MVC和实体框架(模型优先的方法,如果它很重要)。所以,你有一对夫妇由EF生成的类:
class Question {...}
class Answer {...}
还拥有所有相关的东西(ObjectContext
等)。你把所有的相关的代码来处理回答这个问题的方案(StackoverflowController
与AnswerQuestion
[获得] + AnswerQuestion
[文章]动作,也为了显示一个奇特的形式 - Stackoverflow/Answer
)。
你的客户是一个非常艰难的家伙,所以他定义了一套商业规则:
- 没有人应该能够回答这个问题在第5分钟的问法后(他们应该得到的消息)。
- 答案发布后,主题发起人应收到通知。
- 主页面应该显示20个最新的问题。
- 当显示的每一个问题的答案,就应该通过投票排序。
- 当问题与总的-10 downvoted,它们应该被关闭。
- 当答案,总的-10 downvoted,他们的海报应该得到的-20抗奖金他们的声誉。
等
的问题是 - 鉴于上述事实,你会在哪里实现客户的业务规则?
我真的不喜欢具有类似于代码的想法:
public class HomeController : Controller
{
...
public ActionResult Index()
{
return View(_container.Questions.OrderByDescending(x => x.Posted).Take(20).ToList());
}
}
但你会如何命名这个逻辑正确的地方?它应该有什么接口?是这样的:
// implements the business logic, interacts with repositories
public static class Stackoverflow
{
public static IEnumerable<Question> GetRecentQuestions() { ... } // logic here!
public static void PostAnswer(Question question, Answer answer) { ... } // logic here!
}
?
这种话语,开放式问题真正属于http://programmers.stackexchange.com – APC
标记为移动到程序员.stackexchange.com – agibalov
典型的游戏开发者响应:“您应该使用StackoverflowManager类,它应该是静态的。此外,确保静态实例始终具有一种极其复杂的状态。” ^。^ –