首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# API中的模型和它们的接口设计

在传统的MVC、MVP、MVVM、Web MVC这些UI模式中,模型是一个公共元素。虽然有很多文章讨论这些架构中的视图和控制器,但几乎无一涉及模型。...它返回的是IEnumerable而不是IEnumerable,这让它看起来就像是一个C# 1的接口,而不是泛型。...不过缺乏类型安全并不是唯一的问题,这段话摘自它的文档: 此方法返回一个IEnumerable,在异步验证完成处理之前,可能会发生变化。...在新模型中,GetErrors应该始终返回一个支持IEnumerable的集合类。...文档里没有提到这些,因为它没有定义一个子对象是否被认为是“对象内容”的一部分。我个人偏好让IsChanged包含子对象的变化,并为数据存储添加单独的IsChangedLocal属性。

1.7K20

Web API--入门--(一)ASP.NET Web API 2(C#)入门

我正在使用本教程的空模板,因为我想显示没有MVC的Web API。一般来说,你不需要知道ASP.NET MVC来使用Web API。 添加模型 一个模型是代表你的应用程序中的数据的对象。...ASP.NET Web API可以自动将您的模型序列化为JSON,XML或其他格式,然后将序列化数据写入HTTP响应消息的正文。只要客户端可以读取序列化格式,就可以反序列化对象。...我们将添加一个控制器,可以返回产品列表或由ID指定的单个产品。 注意 如果您使用ASP.NET MVC,您已经熟悉了控制器。...控制器定义了返回产品的两种方法: 该GetAllProducts方法将整个产品列表作为IEnumerable 类型返回。 该GetProduct方法通过其ID来查找单个产品。 而已!...例如,要获得ID为5的产品,URI为api/products/5。 有关Web API如何将HTTP请求路由到控制器方法的更多信息,请参阅ASP.NET Web API中的路由。

4.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Asp.Net MVC4入门指南(5):从控制器访问数据模型

    private MovieDBContext db = new MovieDBContext(); 向Movies控制器请求,从而返回Movies电影数据库表中的所有记录,然后将结果传递给Index视图...强类型模型和 @model 关键字 在本系列之前的教程中,您看到了使用ViewBag对象,从控制器传递数据或对象给视图模板。ViewBag是一个动态的对象,提供了方便的后期绑定方法将信息传递给视图。...Model对象传递给View视图, 从而您可以在视图里访问传递过来的强类型电影Model。...创建和编辑方法还有视图模板都在传递电影的强类型模型对象。 看一下Index.cshtml视图模版和MoviesController.cs中的Index 方法。...(是IEnumerable对象),所以在循环中的每个item对象的类型是Movie类型。

    4.2K50

    .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

    我假设使用List来保存一批订单的信息,但是根据业务逻辑需要我们要通过提供一套独立的扩展方法来支持对订单集合数据的处理。这一套独立的扩展方法会跟随着当前系统部署,不作为公共的开发框架的一部分。...2.3】.详细的对象结构图 这个小结主要将IEnumerable及它的扩展方法包括Linq的查询进行一个完整的结构分析,将给出详细的对象结构导图。 对象静态模型、运行时导图: ?...每当Where过后紧接着Select他们是如何关联一个完整的查询的?IQueryable并非IEnumerable对象,无法实时的做出处理然后将结果返回给下一个方法接着执行。...那么它如何将片段性的执行方法串成一个整的、完整的查询?下面我们将逐个的分析这其中要涉及到的模式、数据结构、框架原则,这些搞懂了之后代码都是模型的表现,也就顺其自然的明白了。...} 这是IQueryable接口中从IEnumerable继承下来的两个返回IEnumerator接口类型的方法,在我们目前使用的Linq to Sql、Linq to Entity中都会返回强类型的集合对象

    1.5K11

    ASP.NET MVC5高级编程——(2)MVC模式的视图

    3 ,常见的情况是控制器需要向视图提供一些信息,所以会传递一个数据转移对象,叫做模型(此处模型指的是数据容器,就是类似于Javabean),而视图将这个模型转换为一种适合显示给用户的格式。 ?...强类型视图允许设置视图的模型类型。因此可以从控制器向视图传递一个在两端都是强类型的模型对象,从而获得智能感知、编译器检查等好处。...但要注意这里需要输入模型类型的完全限定类型名(名称空间和类型名称),如下所示:1 @model IEnumerable 2 ...可以使用布局为网站定义公共模版(或只是其中的一部分)。公共模版包含一个或多个占位符,应用程序中的其他视图为它们提供内容。从某些角度看,布局很像视图的抽象基类。...6.指定部分视图 除了返回视图之外,操作方法也可以通过PartialView方法以PartialViewResult的形式返回部分视图: ?

    2.9K10

    Asp.net web api 知多少

    但是它并不是MVC框架的一部分。它是 ASP.NET 平台的核心部分。能被MVC或者其他类型的web应用使用。同时它也可以用作独立的web服务应用程序。...它可以接收和生成非面向对象的内容比如图像!PDF等。 它已经自动支持 OData 。...主要有以下区别: ASP.NET MVC 用来创建web应用返回视图和数据;但是ASP.NET WEB API 是用来创建完整的HTTP服务,仅返回数据无视图返回。...WEB API 的请求映射到Http动词对应的action;MVC 的请求直接映射到对应的action name。 ASP.NET WEB API是新的框架和ASP.NET框架核心的一部分。...您可以在单个项目中混合使用WEB API和MVC控制器来处理高级AJAX请求并以JSON,XML或任何其他格式返回数据,并构建完整的HTTP服务。通常,这将是WEB API自承载。

    4.8K50

    C# WPF MVVM开发框架Caliburn.Micro 名称Transformer⑩①

    使用名称Transformer NameTransformer是在Caliburn.Micro v1.1中引入的,它是ViewLocator和ViewModelLocator如何将类名映射到其伙伴角色的一个组成部分...尽管定位器类将始终最多返回一种类型,而不管NameTransformer返回的名称数量如何,但能够指定NameTransformer如何构造名称列表以更好地控制将定位的类型是很重要的。...自定义规则是通过调用ViewLocator和ViewModelLocator类维护的NameTransformer对象的AddRule()方法添加的。...第一个参数中的“$”表示模式必须在源字符串的末尾匹配。如果“模型”存在于其他任何地方,则模式不匹配。...此捕获组的主要目的不是将其用作转换的一部分,因为ViewLocator的目的是解析视图名称。

    1.8K20

    ASP.NET MVC5高级编程——(2)MVC模式的视图与Razor引擎

    3 ,常见的情况是控制器需要向视图提供一些信息,所以会传递一个数据转移对象,叫做模型(此处模型指的是数据容器,就是类似于Javabean),而视图将这个模型转换为一种适合显示给用户的格式。 ?...强类型视图允许设置视图的模型类型。因此可以从控制器向视图传递一个在两端都是强类型的模型对象,从而获得智能感知、编译器检查等好处。...但要注意这里需要输入模型类型的完全限定类型名(名称空间和类型名称),如下所示:1 @model IEnumerable 2 ...可以使用布局为网站定义公共模版(或只是其中的一部分)。公共模版包含一个或多个占位符,应用程序中的其他视图为它们提供内容。从某些角度看,布局很像视图的抽象基类。...6.指定部分视图 除了返回视图之外,操作方法也可以通过PartialView方法以PartialViewResult的形式返回部分视图: ?

    3.7K51

    企业应用架构模式中的层次模型简介

    简单来说就是每个对象都承担一部分相关逻辑 优点:能够利用现成的技术来组织日趋复杂的领域逻辑(前期准备好了,后期好使用) 缺点:使用复杂、数据源层复杂 表模块 处理某一数据库表或视图中所有行的业务逻辑的实例...领域模型会有多个对象,每个对象都会向前传递一部分行为给另一个对象,直至最终创建了结果 表模块与领域模型的区别: 领域模型对每一个合同都有一个相应的合同类的实例 表模块是只有一个公共的合同类实例 领域模型与表模块的细分...此时它用于提供更易于使用的API,也可以作为切入点增加事务封装和安全检查 在服务层使用事务脚本的形式组织所有的业务逻辑,使得下层的领域对象变简单 控制器-实体 形式。...,返回同一种结构的记录集) 数据映射器 在简单的领域模型中,模型本身和表相当一致,这时可以让领域对象本身去负责数据库的存储过程(也称作活动记录),它实际就是以行数据入口开始,把领域逻辑加入到类中,但是当领域模型复杂时...单阶视图:为每个屏幕准备一个视图组件,视图提取领域数据并把它返回到HTML网页中 两阶视图:首先根据领域数据产生一个逻辑屏幕,然后发往HTML网页。

    1.3K10

    C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦

    虽然这些模式主要通过从特定基类继承ViewModels来在CM中使用,但将它们视为角色而不是视图模型是很重要的。事实上,根据您的体系结构,屏幕可以是用户控件、演示者或视图模型。不过这有点超前了。...IObservableCollection–由以下接口组成:IList、INotifyPropertyChangedEx和INotifyCollectionChanged IChild–由作为层次结构一部分或需要引用所有者的元素实现...如果您遵循SupervisingController或被动查看样式,并且需要使用视图,请使用此选项。这也是放置视图模型逻辑的地方,视图模型逻辑可能依赖于视图的存在,即使您可能没有直接使用视图。...GetChildren–调用此方法返回导体正在跟踪的所有项目的列表。如果导体使用“屏幕集合”,则返回所有“屏幕”,否则仅返回ActiveItem。...将对象连接起来,以便可以在导体中打开不同的视图模型。当激活每个视图模型时,确认在选项卡控件中看到正确的视图。 在Silverlight中重建此示例。

    2.6K20

    C# 8中的Async Streams

    关键要点 异步编程技术提供了一种提高程序响应能力的方法。 Async/Await模式在C# 5中首次亮相,但只能返回单个标量值。...正如你在输出窗口中看到的那样,结果被分成几个部分返回,而不是作为一个值返回。以上显示的累积结果被称为惰性枚举。但是,仍然存在一个问题,即sum方法阻塞了代码的执行。...这是C# 8中新提出的功能。这个新功能为我们提供了一种很好的技术来解决拉取式编程模型问题,例如从网站下载数据或从文件或数据库中读取记录。 让我们尝试使用当前的C# 版本。...;foreach (var sc in scs){ // 这不是我们想要的,结果将作为块返回!!!!...结果(所有结果都在集合中累积)作为一个块返回,但这不是我们想要的惰性行为,我们的目标是将惰性行为与异步计算风格相结合。

    1.3K20

    C#3.0新增功能09 LINQ 基础02 LINQ 查询简介

    因此,开发人员对于他们必须支持的每种数据源或数据格式,都不得不学习一种新的查询语言。 LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况。...如果源数据还没有作为可查询类型出现在内存中,则 LINQ 提供程序必须以此方式表示源数据。...但基本规则很简单:LINQ 数据源是支持泛型 IEnumerable 接口或从中继承的接口的任意对象。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。 另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。...但是,通过调用 ToList 或 ToArray,也可以将所有数据缓存在单个集合对象中。

    3.5K30

    DDD理论学习系列(12)-- 仓储

    IQueryable Vs IEnumerable 在定义仓储方法的返回值时,我们可能会比较疑惑,是应该直接返回数据(IEnumerable)还是返回查询(IQueryable)以便进行进一步的细化查询...返回IEnumerable会比较安全,但IQueryable提供了更好的灵活性。事实上,如果使用IQueryable作为返回值,我们仅提供一种读取数据的方法即可进行各种查询。...但具体是返回 IQueryable还是IEnumerable每个人的看法不一,具体可参考Repository 返回 IQueryable?还是 IEnumerable?。 5....如果您有一个关系数据库并且正在使用ORM作为数据模型,那么您可能能够延迟加载一些领域对象属性,这样就可以推迟加载不需要的聚合部分。...另外仓储是基于事务的,可能会导致报表的性能问题。 7. 总结 仓储作为领域模型和数据模型的中介,它负责映射领域模型到持久化存储。 仓储实现了透明持久化,即领域层不需要关注领域对象如何持久化。

    2K70

    LINQ查询操作符 LINQ学习第二篇

    如果你使用了DefaultIfEmpty方法的重载方法DefaultIfEmpty(IEnumerable array),如果指定的array集合为空,那么将返回一个类型为T,值为null的单个对象...Cast Cast 方法通过提供必要的类型信息,可在IEnumerable(非泛型)的派生对象上调用Cast 方法来获得一个IEnumerable对象。...ToArray ToArray 操作符可以在IEnumerable 类型的任何派生对象上调用,返回值为T类型的数组。 5....ToList ToList操作符可以在IEnumerable 类型的任何派生对象上调用,返回值为List类型的对象。 7....以下的示例以产品表的所有数据作为数据源,以类别ID作为Key调用了ToLookup方法,然后遍历返回的Lookup对象,输出了类别ID以及此类别下的所有产品名称:

    3.1K50

    C#3.0新增功能09 LINQ 标准查询运算符 04 运算

    与之相反,SelectMany() 生成单个总体结果,其中包含来自每个源值的串联子集合。 作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列。...下面是单向关系的一个示例:Customer 类有一个类型为 City 的属性,但 City 类没有作为 Customer 对象集合的属性。...用关系数据库术语表达,就是说 Join 实现了内部联接,这种联接只返回那些在另一个数据集中具有匹配项的对象。...下图显示了一个概念性视图,其中包含两个集合以及这两个集合中的包含在内部联接或左外部联接中的元素。 ?...方法名 说明 C# 查询表达式语法 详细信息 AsEnumerable 返回类型化为 IEnumerable 的输入。 不适用。

    9.7K20

    C# 发展历史及版本新功能介绍

    匿名类型 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。...通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。...它遵循基于任务的异步模式 (TAP)。 异步模型的基本概述 异步编程的核心是 Task 和 Task 对象,这两个对象对异步操作建模。 它们受关键字 async 和 await 的支持。...在大多数情况下模型十分简单: 对于 I/O 绑定代码,当你 await 一个操作,它将返回 async 方法中的一个 Task 或 Task。...除了发布此版本,他们还做了另一件事,虽然这件事本身与传统的语言功能无关。 他们发布了 Roslyn 编译器即服务。 C# 编译器现在是用 C# 编写的,你可以使用编译器作为编程工作的一部分。

    4.2K20
    领券