.net Web 服务最佳实践...SRP?

2024-04-15

关于多少个文件、代码行、职责等,什么被认为是 .asmx 或 wcf 服务类的适当开发?大多数人是否为每个类的不同 CRUD 方法发布单独的 .asmx 服务文件?


一般来说,一个服务应该封装一组通用的操作。无论您使用 ASMX 还是 WCF,您都不应该为每一项操作创建一个“服务”。面向服务的架构 (SOA) 背后的总体思想是对现实世界的业务行为进行建模。给你一个愚蠢但希望有效的例子……想想一家餐馆的女服务员。服务员为顾客提供的服务包括接单、上菜、续杯、提供调味品、最后处理付款。女服务员提供的服务不是单一操作,而是相关操作的聚合。

然而,它并不止于此。 SOA 的真正本质是任何给定的服务都可能依赖于其他服务。女服务员的工作离不开厨师的服务、提供膳食、服务柜台的人员(她可以在柜台上获取调味品和饮料)以及餐厅大楼本身提供的服务。女服务员提供的服务和厨师提供的服务之间也存在一些根本区别。简而言之,Waitress 是一项任务服务,而 Cook 是一项实体(或 CRUD)服务。女服务员处理为客户提供有用功能的较高级别操作,而厨师则处理仅向餐厅其他员工提供细粒度和复杂功能的较低级别操作。

对于您的问题,我确实无法给出具体答案,只能说按照逻辑上合适的方式组织您的服务。每个服务只有一个操作可能不是一个好习惯...但是,服务只有一个操作并非闻所未闻。任务服务通常只有一项操作。实体服务通常有许多操作,通常是基于 CRUD 的,但有时还有附加服务。还有一些公用事业服务提供最低级别的基础设施操作(回到餐厅,公用事业服务就像炉灶、烤架、收银机等)。如果您根据实际业务概念对服务进行建模,那么它们公开的操作及其彼此之间的依赖最终应该变得清晰。

有关 SOA 的一些重要信息,请查看 Thomas Erl(Prentice Hall)编写的 SOA 系列,因为它们是实现面向服务的企业的权威资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.net Web 服务最佳实践...SRP? 的相关文章

随机推荐

  • 我可以确定是否从终端运行 Perl 脚本吗?

    我可以确定是否从终端运行 Perl 脚本吗 如果我不确定的话 我宁愿默认假设它是从浏览器运行的 但如果有一种方法可以确保它 100 是从终端运行的 我会很高兴 出于调试目的 这是直接取自 ExtUtils MakeMaker 的源代码pro
  • 如何在 Dart 中对字符串列表进行排序?

    我在 API 文档中看到有一个sort 方法上List 但我不清楚它需要什么参数 当前的需求是进行非常简单的直接 alpha 比较 1 快速解决方案 谢谢你的提问 您可以对列表进行排序String像这样 main final List
  • Vue.js 2 - 从 body 标签中删除初始边距

    如果这是一个愚蠢的问题 我很抱歉 我对 Vue 还很陌生 我创建了一个 Vue 使用命令vue init webpack
  • 重新分配值时维护每个键的对象值类型

    const obj a 1 b foo for const k of Object keys obj as keyof typeof obj obj k obj k TS游乐场 https www typescriptlang org pl
  • 从 VB6 和 C# 调用 DLL 给出的双精度结果略有不同

    我在 DLL 中有一个专有库 我没有代码 该库已在 VB6 中使用多年 我正在尝试将VB6代码升级到C 并希望使C 代码完全复制VB6的行为 当从每个环境调用时 我无法使 DLL 中完成的某些计算的双精度结果完全匹配 在 VB6 中 我有类
  • React使用dangerouslySetInnerHTML来渲染带有html标签的json

    我正在尝试渲染一个 json 列表 其中列表中的字符串中包含 html 标签 如下所示jsbin https jsbin com deqiqeb edit js console output 它可以在 Jsbin 中运行 但在我的控制台中我
  • 是否可以使用 Mono 运行 clickonce 应用程序?

    我正在开发 clickonce 应用程序 我可能想在 Mac 平台上分发该应用程序 我知道我可以使用 Mono 编译 Net 应用程序 并且它可以在 Mac 上运行 但是我可以使用 clickonce 作为安装程序吗 thanks 我认为
  • LinqKit:AsExpandable 不起作用

    Code public static GetRows var to ret db TableRows Select x gt new TableRowModel TableRowId x TableRowId Type x Type Nam
  • 从 iPhone 直接链接到撰写评论页面

    我一直在尝试将用户重定向到评论页面 我尝试了 3 种不同的 URL 格式 转到 Safari 上的产品页面 http itunes apple com us app british accent id350212768 mt 8 http
  • 如何将异常转换为 NSError 对象

    我想将异常消息转换为 NSError 对象 以便我可以在 try catch 块中使用它 我实际上正在研究一个React Native 的原生 iOS 模块 https facebook github io react native doc
  • 为什么不能继承构造函数为私有的类?

    为什么 Java 不允许继承构造函数为私有的类 Java 不阻止使用私有构造函数对类进行子类化 public class Main static class A private A System out println Subclassed
  • 如何从随机字节数组值中获取随机双精度值?

    我想使用 RNGCryptoServiceProvider 作为我的随机数源 由于它只能将它们输出为字节值数组 因此如何将它们转换为 0 到 1 双精度值 同时保持结果的一致性 byte result new byte 8 rng GetB
  • openslide python import show:windows 错误

    我正在使用 python 2 7 win 32 我需要在 python 中安装 openslide 在下面的页面显示 安装openslide http openslide org download http openslide org do
  • 为什么我无法修改拆箱转换的结果?

    struct Point public int x public int y void Main Point p p x 1 p y 1 Object o p Point o x 4 error Point o x 5 error Poin
  • 如何计算Gabor滤波器的空间频率?

    This https stackoverflow com questions 9003147 how to apply gabor wavelets to an image问题很好地描述了 gabor 滤波器系列及其应用 但是 没有任何关于
  • 没有原始文本弹出窗口的 Bing 翻译小部件

    我在我的网站中实现了 Bing Translator Widget 效果很好 但是 我找不到任何方法来禁用显示原始文本的翻译文本上附加到悬停事件的烦人弹出窗口 有什么办法可以禁用它 提前致谢 以下是有关如何使用该小部件的官方页面的链接 ht
  • ivy或ivyDE可以在Eclipse中自动将相关jar添加到JAVA构建路径库中吗?

    例如 当我在 Eclipse 中打开一个开发良好的开源项目 如 lucene 同时使用 ant build xml 和 ivy ivysetting xml 时 我可以使用 build xml 运行 ant 来成功构建整个项目 然而 该项目
  • 安装后离子问题

    我需要一些帮助来解决我的 mac 上的 ionic 问题 对于我使用 ionic 从终端启动的每个命令 我都会收到相同的错误 如下所示 例如 即使我发出命令ionic v 我收到这个 ionic v usr local lib node m
  • 无法解析符号 ViewHolder

    我试图实现一个recycler view 但我无法使用viewHolder 请找到解决方案 提前致谢 你可以尝试一下这个方法希望对你有帮助 public class YourAdapter extends RecyclerView Adap
  • .net Web 服务最佳实践...SRP?

    关于多少个文件 代码行 职责等 什么被认为是 asmx 或 wcf 服务类的适当开发 大多数人是否为每个类的不同 CRUD 方法发布单独的 asmx 服务文件 一般来说 一个服务应该封装一组通用的操作 无论您使用 ASMX 还是 WCF 您