使用接口和/或依赖注入重新分解Web API控制器

时间:2013-09-24 18:01:37

标签: design-patterns interface dependency-injection asp.net-web-api

我有一堆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和其他方法。需要一些指导,指出要遵循的路径。

1 个答案:

答案 0 :(得分:1)

看看规格模式。您可以在每个规范中放置一个规则,例如NotNullProductRule,并将控制器中所需的规范链接在一起。