Tag: solid principles

了解使用单一责任原则的实际好处

我正在努力理解SRP,但是,虽然我理解了如何应用它的原因,但我并没有真正看到这样做的好处。 考虑这个例子,取自Robert Martin的SRP PDF : interface IModem { void Dial(string number); void Hangup(); void Send(char c); char Recv(); } 他建议将其分为两个界面: interface IModemConnection { void Dial(string number); void Hangup(); } interface IModemDataExchange { void Send(char c); char Recv(); } 我也一直在阅读这篇文章 ,它更进了一步: interface IModemConnection : IDisposable { IModemDataExchange Dial(string number); } interface IModemDataExchange { void Send(char c); […]

更改基本MVVM的当前实现以遵守SOLID模式

我一直在编写所有MVVM应用程序,其基本设计模式通常在网上提供的MVVM示例中提到。 我所遵循的模式描述如下: 模型 本节包括DTO类及其属性和Interfaces IDataService等: public class Employee { public string EmployeeName { get; set; } public string EmployeeDesignation { get; set; } public string EmployeeID { get; set; } } public interface IDataService { public Task GetEmployeeLst(); } 代理 该层包含实现IDataservice的Dataservice调用,如: public class DataService : IDataService { public async Task GetEmployeeLst() { // Logic to […]

注入require对象取决于构造函数注入中的条件

我有一个界面 public interface ITrnsitReport { List GetTransitReportData (); } 它只有一个实现 public class TransitReport : ITrnsitReport { private IValidateInput _inputValidation = null; private readonly ITransitRepository _transitRepo = null; public TransitReport (IValidateInput inputValidation, ITransitRepository transitRepo) { _inputValidation = inputValidation; _transitRepo = transitRepo; } public List GetTransitReportData (string input1, string input2) { List ppdcReportList = null; bool isValid […]

这是单一责任原则的一个例子吗?

我做了以下代码示例,以了解如何使用generics方法签名。 为了获得Customer和Employee的Display()方法 ,我实际上开始用Person抽象类替换我的IPerson接口 。 但后来我停下来,记得一个播客,其中鲍勃叔叔告诉Scott Hanselman关于单一责任原则 ,你应该有很多小class,每个class做一件特定的事情,即一个Customerclass不应该有一个Print()和Save ()和CalculateSalary()方法,但您应该有CustomerPrinter类和CustomerSaver类以及CustomerSalaryCalculator类 。 这似乎是一种奇怪的编程方式。 然而, 摆脱我的界面也感觉不对 (因为很多IoC容器和DI示例本身使用它们)所以我决定尝试单一责任原则。 所以下面的代码与我过去编程的不同 (我会用Display()方法创建一个抽象类并摆脱界面)但是基于我所听到的关于解耦和SOLID原理的内容, 这个新的编码方式 (接口和PersonDisplayer类) 我认为这是正确的方法 。 我想听听其他人是否在这个问题上采用相同的方式 ,或者是否经历过这种积极或消极的影响(例如,每个人做一件特别的事情都是笨拙的,等等)。 using System; namespace TestGeneric33 { class Program { static void Main(string[] args) { Container container = new Container(); Customer customer1 = container.InstantiateType(“Jim”, “Smith”); Employee employee1 = container.InstantiateType(“Joe”, “Thompson”); Console.WriteLine(PersonDisplayer.SimpleDisplay(customer1)); Console.WriteLine(PersonDisplayer.SimpleDisplay(employee1)); Console.ReadLine(); } } public […]

C#返回类型协方差和Liskov替换原理

我正在尝试理解协方差和LSP。 从这个问题我可以看出C#不支持返回类型协方差。 然而Liskov替换原则对返回类型强加协方差。 这是否意味着在C#中应用这个原则是不可能的? 还是我想念一些东西?

如何将SOLID原则实现到现有项目中

我为这个问题的主观性而道歉,但我有点卡住了,我会感谢任何以前必须处理这个问题的人的指导和建议: 我有(成为什么)一个用C#2.0编写的非常大的RESTful API项目,我的一些类变得非常可怕。 我的主要API类就是一个例子 – 有几十个成员和方法(可能接近数百个)。 你可以想象,它变成了一个小噩梦,不仅仅是维护这段代码,甚至只是导航代码已经成为一件苦差事。 我是SOLID原则的新手,我是设计模式的忠实粉丝(但我仍处于可以实现它们的那个阶段,但还不足以知道何时使用它们 – 在不太明显的情况下) 。 我需要打破我的class级规模,但我不知道如何最好地去做。 我的StackOverflower伙伴能否建议他们采用现有的代码单块并将其缩小到适当的尺寸?