你正在使用你自己的版本的計算器:-)什麼地方適合商業邏輯?
你正在使用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類,它應該是靜態的。此外,確保靜態實例始終具有一種極其複雜的狀態。」 ^。^ –