我有一堆Web API控制器,通常看起来像这个例子:
public class ProductsController : ApiController
{
private readonly context db = new context();
public Product GetProductById(int id)
{
var product = db.products.FirstOrDefault((p) => p.Id == id);
var category = db.category.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
if (category == someCategory)
{
throw new HttpResponseException(HttpStatusCode.BadRequest,new HttpError( "Custom Message"));
}
if (itsrainingToday == SomeOtherSpaghettiCode)
{
throw new HttpResponseException(HttpStatusCode.BadRequest, new HttpError("Some other mess"));
}
//and so on and so forth
return product;
}
}
正如你所看到的,这是一个很难看的混乱,尤其是。如果你有数百个规则和几十个控制器。 分解这些“业务规则”的有效方法是什么,以便它们可以应用于具有覆盖的多个控制器? 我正在寻找一个好的设计模式和基于这个通用代码的例子。
我了解工作单元,Unity和其他方法。需要一些指导,指出要遵循的路径。
答案 0 :(得分:1)
看看规格模式。您可以在每个规范中放置一个规则,例如NotNullProductRule,并将控制器中所需的规范链接在一起。