单一职责在.NET中

单一职责是降低耦合度的指导思想,适用于一个微服务,一个类型,一个方法。

微服务层:

微服务一般按业务的领域来进行拆分:药房微服务就是药房的业务,护士站微服务就是护士站的业务,广义上没有什么问题,但对于一些共用业务,就犯难了,究竟放在那个微服务里?还是合并两个微服务?其实这里就单一,把共用的抽离出来,不一定做成另一个微服务,可以统一做成类库,供两个微服务调用,如果业务有细微差别,可以通过设计模式来灵活解决异构情况。

类型:

这里的类型,一般指复杂类型:如结构体(struct),接口(interface),抽类(abstract class),实例化类(class),记录(record)。这此类型内部,重要的成员有属性,方法,正是这些成员的规划,是决定这些类型是否职责单一的重要指标。

比如下面的用户类型,这样的定义是不没有错误的,对于一些小型项目,这样定义是最经济的。

    /// <summary>/// 用户/// </summary>class User{/// <summary>/// 用户名 /// </summary>public string UserName { get; set; }/// <summary>/// 密码/// </summary>public string Password { get; set; }/// <summary>/// 性名/// </summary>public string Name { get; set; }/// <summary>/// 性别 true男,false为女/// </summary>public bool Sex { get; set; }/// <summary>/// 职务/// </summary>public string Position { get; set; }/// <summary>/// 生日/// </summary>public DateTime Birthday { get; set; }}

如果从单一职责考虑,这个类可以分为三个类,如下:

   /// <summary>/// 用户/// </summary>class User{/// <summary>/// 用户名 /// </summary>public string UserName { get; set; }/// <summary>/// 密码/// </summary>public string Password { get; set; }}/// <summary>/// 人员职务/// </summary>class Position{/// <summary>/// 职务名称/// </summary>public string PositionName { get; set; }}/// <summary>/// 人员/// </summary>class Person{/// <summary>/// 人员编号/// </summary>public string PersonNo { get; set; }/// <summary>/// 性名/// </summary>public string Name { get; set; }/// <summary>/// 性别 true男,false为女/// </summary>public bool Sex { get; set; }/// <summary>/// 年龄/// </summary>public int Age { get; set; }/// <summary>/// 用户/// </summary>public User User { get; set; }/// <summary>/// 职务/// </summary>public Position[] Positions { get; set; }}

分开以后,虽然代码增多了,但每个类的作用就单一了,用户就是用户,人员就是人员,职务分出来当其扩展时其他类型也不受影响。

方法:

越往下层,单一职责的把握越困难,特别是在写一个方法的时候,单一的这个单位很模糊,怎么就算单一?

比如写一个发送数据模块,主要分部分:组织数据,发送数据,也就对应两个方法BuildData,SendData,可能在组织数据时发现,有些数据得作转换,比如时间,类型等,这时可以在BuildData里作转换,当然也可以把转换这部分抽离出来,组成一个TransformData,纠结的是,有时转换数据只要一行代码,如果按单一职责思想应该分离出来,但看到分离的代码觉得差强人意,有没有一个标准呢?

这里我给出我自己的标准(仅代表自己的认识):

1、在纠结一个方法要不要拆开时,第一考虑是业务的单一性

2、有些业务之间当前状态统一的,要联想下一步状态,或下一阶段,这种状态是否持续(不要关心这个状态在现实中什么时间到来)

3、多用一些经典的设计模式来让方法彼此隔离,互不干扰

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDG转PDF的方法

下面是我在“小文论坛”发的关于PDG转PDF的办法转贴请注明出自“小文论坛”.点击链接访问小文论坛前些天在坛子里看到一位朋友发的通过代理登录教育网超星的办法,试了试,还不错,下下来了几本吉他方面和计算机方面的书。但下下来的书是加密保存的&#xff0c;当该用户过期后又怎…

Roslyn 使用 Directory.Build.props 管理多个项目配置

在一些大项目需要很多独立的仓库来做&#xff0c;每个仓库之间都会有很多相同的配置&#xff0c;本文告诉大家如何通过 Directory.Build.props 管理多个项目配置在我的 MVVM 框架需要三个不同的库&#xff0c;一个是 Framework 另外两个是 WPF 和 UWP 这三个库有很多重复的配置…

java 中符号_谁能告诉我java中符号的用法,见代码

展开全部大家都知道Vector以及其他的容器可以不加任何修饰地e68a8462616964757a686964616f31333236373765存储任何类型的对象,这给我们带来了极大的方便&#xff0c;也使得容器很容易被复用&#xff0c;但是大多数时候我们可能需要只能存储某一类型对象的Vector&#xff0c;这是…

彻底堕落了一回——大三篇

转载于:https://www.cnblogs.com/wuwa/archive/2005/06/21/6191772.html

在.NET Core中使用Channel(一)

我最近一直在熟悉.net Core中引入的新Channel<T>类型。我想在它第一次发布的时候我了解过它&#xff0c;但是有关文章非常非常少&#xff0c;我不能理解它们与其他队列有什么不同。在使用了一段时间后&#xff0c;我终于看到了它们的吸引力和真正的力量。最值得注意的是大…

java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

目录1、使用 Java 来控制 Windows 系统音量&#xff0c;使用 JNA 调用 windows 底层 API 因为有点麻烦&#xff0c;所以这里采用纯 Java API结合 VBS 脚本的方式进行控制。2、可以参考《VBS 控制 Windos 系统音量 及视频播放》&#xff0c;本文同样是利用 VBS 来控制&#xff0…

无题

今天开会&#xff0c;其实不开都知道要讲啥&#xff0c;教代会上就是讨论关于薪金的问题&#xff0c;钱拿的越来越少&#xff0c;所以要想拿钱的话只有写论文&#xff0c;带比赛&#xff0c;或参加比赛&#xff0c;获奖后才能有钱发&#xff0c;哎~~~昨天晚上xz说她确定要ky&am…

【Hook】postman工具的代码生成工具让它锦上添花

修改postman工具的代码生成工具加入response自动生成POJO代码如上图可以快速把请求这个动作转成code&#xff0c;减少重复性劳动。但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转…

2005/7/15[随便写写]

通过面试开始在公司正式上班了&#xff0c;去的很早&#xff0c;呵呵&#xff0c;以为里面的员工都需要敲卡的&#xff0c;不想给大家一个坏印象。环境么给我的感觉氛围很不错&#xff0c;没有传统IT行业那种被项目赶得焦头烂额的样子&#xff0c;可是我的性格决定了我不是那种…

java nature_Java Nature.nsf方法代码示例

import com.hankcs.hanlp.corpus.tag.Nature; //导入方法依赖的package包/类/*** 执行识别* param segResult 粗分结果* param wordNetOptimum 粗分结果对应的词图* param wordNetAll 全词图*/public static void Recognition(List segResult, WordNet wordNetOptimum, WordNet…

使用BeetleX.ESDoc构建文档搜索功能

BeetleX.ESDoc组件是基于ElasticSearch服务的文档搜索扩展组件。它在BeetleX.Elasticsearch的基础上包装一些基于文档检索的功能和方法&#xff0c;可以让你在不了解ElasticSearch API的情况下直接存储&#xff0c;删除和搜索相关信息。信息结构BeetleX.ESDoc定义了一个基础的文…

java在文件的后面添加_java 在file的尾部添加数据的两种方法总结

java 在file的尾部添加数据的两种方法总结问题描述:在文件的末尾追加内容方法1:利用RandomAccessFile类1.将randomAccessFile模式设置为rw2将randomAccessFile移动(seek)到文件末尾3追加数据4关闭流方法2:利用FileWriter类1.将FileWriter构造方法第二个参数置为true.表示在尾部…

日产汽车源码遭泄露

喜欢就关注我们吧&#xff01;日产北美公司开发和使用的移动应用及内部工具的源代码于近日在网上泄露&#xff0c;原因是该公司错误配置了其中一台 Git 服务器。瑞士软件工程师 Tillie Kottmann 向 ZDNet 透露&#xff0c;此次泄露源于一台配置错误的 Bitbucket Git 服务器的信…

开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本

开源纯C#轻量级数据库引擎&#xff1a;SharpHSQL 1.0.3.0版本出了&#xff12;个多月了&#xff0c;我一直没有给大家报道&#xff0c;这是目前唯一发现的用纯C#开发的稳定的轻量级数据库引擎&#xff0c;在我的建议下&#xff0c;已经支持Unicode&#xff0c;包括简体中文了。…

mysql约束深入了解_MySQL 的约束

约束是添加在列上, 用来约束列的!1. 主键约束(表中的某行的唯一标识)主键的特点:非空唯一被引用创建表时, 指定主键的两种方式&#xff1a;// 需求: 指定 sid 列为主键列, 即为 sid 列添加主键约束// 第一种方式:CREATE TABLE stu(sid CHAR(6) PRIMARY KEY,sname VARCHAR(20),a…

中台的故事结束了?

大家好&#xff0c;我是Z哥。所谓30年河东30年河西&#xff0c;最近阿里开始去中台了。这是不是意味着中台时代的落幕&#xff0c;去中心化时代的开始&#xff1f;谁都说不准。但是我们可以来思考一下这个事情背后释放出了什么样的信号。对我们普通人&#xff0c;特别是互联网行…

[ZT]C#的多线程机制探索(2)

三.线程的同步和通讯——生产者和消费者假设这样一种情况&#xff0c;两个线程同时维护一个队列&#xff0c;如果一个线程对队列中添加元素&#xff0c;而另外一个线程从队列中取用元素&#xff0c;那么我们称添加元素的线程为生产者&#xff0c;称取用元素的线程为消费者。…

java树算法_Java数据结构算法(三)树

本文旨作于收集整理使用&#xff01;&#xff01;导航一、树树(Tree)是n(n≥0)个结点的有限集&#xff0c;n0称之为空树。在非空树种&#xff1a;当有且仅有一个特定的称为根(Root)的结点&#xff1b; 其余结点可以划分为m(m&#xff1e;0)个互不相交的有限集T1、T2 、…、Tm&a…

Blazor VS 传统Web应用程序

原文作者: Christian Findlay原文链接&#xff1a;https://christianfindlay.com/2020/07/09/blazor-vs-traditional-web-apps/Blazor是Microsoft团队开发的单页面应用程序&#xff08;SPA&#xff09;框架&#xff0c;它是与React&#xff0c;Angular和Vue.js有相同之处&#…

java 并发 面试题_阿里面试官总结10个经典技术题:Java多线程与并发面试题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼5&#xff0c;有哪些不同的线程生命周期&#xff1f;当我们在Java程序中新建一个线程时&#xff0c;它的状态是New。当我们调用线程的start()方法时&#xff0c;状态被改变为Runnable。线程调度器会为Runnable线程池中的线程分配CP…