代码之家  ›  专栏  ›  技术社区  ›  Paul

关于编写“灵活的”API的想法?

  •  2
  • Paul  · 技术社区  · 16 年前

    我有一个ASP.NETMVC应用程序,它在其中调用WCF服务以获取将要呈现的ViewModels(它使用WCF服务的原因是,其他小型MVC应用程序可能也会调用这些ViewModels…只是在内部,它不是一个公开的东西,所以我可以更改服务的任何一方。这样做的目的是将网站中的逻辑移近服务器/数据库,这样往返的成本就不会太高(而且从网站服务器到数据库服务器只进行一次往返)。

    我正在努力找出最好的办法从服务中返回这些“ViewModels”。有很多常见的小功能,但每个页面可能需要显示这些内容的不同子集(因此主页可能是一个表列表,下一页是一个表列表和可用的用户列表)。

    那么,最好的返回页面所需信息的方法是什么呢?但愿web服务不知道该页面的信息?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jab    16 年前

    然后,您的服务只负责一件事,即返回特定于视图函数的数据。每个应用程序的控制器负责使用/不使用返回的数据片段。

    这将更加灵活,因为您的ViewModels可能也需要不同的验证规则。ViewModels还有MVC特定的需求(SelectList等),服务层不应该真正返回这些需求。似乎有些东西可以一目了然地共享,但通常有很多小的差异,这使得共享ViewModels成为一个坏主意。

    class MyServiceViewResult
    {       
        public int SomethingEveryViewNeeds { get; set; }
        public bool OnlyOneViewMightNeedThis { get; set; }
    }
    
    class ViewModel1
    {
        public int IdProperty { get; set; }
    
        public ViewModel1(MyServiceViewResult result)
        {
            IdProperty = result.SomethingEveryViewNeeds;
        }
    }
    
    class ViewModel2
    {
        public int IdProperty { get; set; }
        public bool IsAllowed { get; set; }
    
        public ViewModel2(MyServiceViewResult result)
        {
            IdProperty = result.SomethingEveryViewNeeds;
            IsAllowed = result.OnlyOneViewMightNeedThis;
        }
    }
    
        2
  •  0
  •   Community Mohan Dere    9 年前

    与其拥有一个web服务,不如将服务实现为一个 可重用库

    这也将允许您使用 多态性

    有关多态解决方案的概述,请参见此相关问题: Is this a typical use case for IOC?