【问题标题】:WebAPI ODATA -- Consuming With MVC Using Standard Controller/Ioc/Repository/UoW Sort of ArchitectureWebAPI ODATA -- 使用标准控制器/Ioc/Repository/UoW 架构的 MVC 消费
【发布时间】:2014-09-13 11:55:19
【问题描述】:

使用 javascript 使用 WebAPI ODATA 服务不是问题……但是当前的建议是包装 http 调用 (CRUD) 以通过具有存储库的 MVC5 应用程序使用。我看到的大部分指导最终都直接指向实体/dbcontext。我正在寻找能够演示“饮用您自己的 Kool-Aid”并使用相同的 ODATA(也可以是纯 WebAPI)的指南,该 ODATA 也可以是从外部发布给应用程序消费者的。

在我看来,我正在研究这种流程: AppController (site1:443)-->AppRepository-->OdataController (apiSite2:443)-->OdataRepository-->DataSource

第二个问题是我不一定希望任何消费者直接访问数据源——尤其是未经审查的帖子,并且我不希望控制器中的所有(任何)逻辑。我可能想多了……

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api odata crud


    【解决方案1】:

    为了从控制器中提取业务逻辑,我通常会尽可能将所述逻辑下推到域对象中。如果这不可能,那么我将创建一个专门用于管理相关逻辑的类,例如两个不同对象之间的交互。

    如果一切都失败了,那么我将让交互由服务管理。这些类可能如下所示:

    public class SomeApiController : ApiController
    {
        public SomeApiController(ISomeApiService service)
        {
           this.Service = service;
        }
    
        private ISomeApiService Service { get; set; }
    
        public IHttpActionResult SomeMethod(int someObjectId)
        {
            // service manages the logic and either defers to the object in question or resolves it through some specialized class
            var result = this.Service.SomeMethod(someObjectId);
            return this.OK(result);
        }
    }
    
    public class SomeApiService : ISomeApiService
    {
        public SomeApiService(ISomeRepository repository)
        {
            this.Repository = repository;
        }
    
        private ISomeRepository Repository { get; set; }
    }
    

    ... 等等。

    这个想法是层之间没有依赖关系,这无法通过您选择的 IoC 容器解决,并且依赖关系只有一种方式。也就是说 SomeApiService 对 SomeApiController 没有依赖,SomeApiRepository 对 SomeApiService 也没有依赖。

    【讨论】:

    • 非常好——非常出色——发布 m.casey,但我可能没有正确表达我的问题。我担心控制器使用来自另一个控制器和/或远程服务的服务的最佳实践——即不是使用 WCF 创建的基于 ODATA 的 Web API。因为,WebAPI 确实没有元数据,而 ODATA 元数据有很大不同,所以我认为 CRUD 的处理不会那么干净。关于我能找到的最近的东西(类似包装器)在这里:stackoverflow.com/questions/22146823/…
    猜你喜欢
    • 2016-01-24
    • 2013-03-23
    • 2011-01-28
    • 2013-12-28
    • 2012-12-12
    • 2023-03-21
    • 1970-01-01
    • 2016-05-11
    • 2013-04-20
    相关资源
    最近更新 更多