魔法世界的开发:SOLID、KISS、YAGNI、DRY、DDD、TDD
引言
什么是合格的软件?
资质软件的要求是什么?
坚硬的
[S]单一责任原则 (Princípio da Responsabilidade Única)
[O]pen/封闭原则 (Princípio do Aberto/Fechado)
[L]iskov 替换原理 (Princípio da Substituição de Liskov)
接口隔离原则 (Princípio da Segregação de Interfaces)
[D]依赖倒置原理(Princípio da Inversão de Dependências)
吻
亚格尼
干燥
分布式驱动
测试驱动开发
结论
Referências:
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
引言
No artigo de hoje vou esclarecer um pouco sobre essas que ainda deixam muita gente confusa。一般而言,我们将重点关注主要资质软件的开发。 Vamos começar então abordando o que seria um software de qualidade and qual a important do mesmo.
什么是合格的软件?
定义一个极其复杂的软件程序资格,并回顾一下它的原理。
嗯,这个软件是签证解决程序确定问题的程序。世界上没有任何企业,我们无法解决客户的决定性勇气和满意度。这是我们最初的想法:软件定义的能力和满足我们确定的需求的资格。 E aí entram questões como usabilidade, aplicação correta de regras de negócio, Performance, etc.
O segundo conceito é em relação ao processo desenvolvimento, onde podemos levar em thinkação clareza do código, Consência, manutenibilidade, capacidade de expansão,齿尾。没有任何内容、相互之间的联系、软件设计的实用性、清晰性和一致性,所有这些都可以作为特定具体要求的必要条件。
资质软件的要求是什么?
首先,我们将使用与此相关的软件。 Mais especamente para necessidades de pessoas。 E 为necessidades、inevitavelmente、mudam。作为必要的必需品,操作系统软件必须具有足够的能力。您可以快速、轻松地阅读这些内容。
O segundo ponto é que nós trabalhamos em times. E esses times possuem pessoas differenterentes, com habilidades differenterentes e eles também mudam.所有这些软件和解决方案、一系列解决问题的问题(或 ainda vai passar)、我们都希望完成该功能或需要实现之前的功能。
重要的事情是,我们要为他们提供帮助,并为他们提供帮助。我们将在其中介绍、记录、测试、比较一致的实践、主要的敏捷性和安全性,以确保新功能的发展。显然,这就是所有标题的缩写,主要是对书写代码的资格。 Alguns são conceitos,outros methodologias,mas todos com o mesmo propósito。 Então,vamos aos conceitos。
注:Vale lembrar que a ideia aqui é dar uma visão geral sobre cada um dos conceitos。 Alguns dos assuntos são extremamente profundos e merecem um (ou mais) artigos dedicados。
坚硬的
众所周知,固体与物体发展的 5 个基本原则相结合,可以构建出全面、灵活和可持续的结构。 Alguns dos conceitos são mais fáceis de entender analisando exemplos, portanto, este será o único topic em que vou colocar alguns codigos:
[S]单一责任原则 (Princípio da Responsabilidade Única)
一个班级应该只有一个,也只能有一个改变的理由。
简单的阿西姆。 Uma classe deve ter uma e somente uma responsabilidade。首先,了解一些简单的原则,但同时了解一些重要的内容,并了解其结尾功能的基本内容。以下是一些例子:
//without solid
class EmailService {
validateEmailAndSend(string emailAddress, string subject, string content): boolean;
}
//with solid
class EmailService {
sendMail(emailAddress: string, subject: string, content: string): void {
//
};
}
class Validator {
validateEmail(email: string): boolean {
//
};
}
[O]pen/封闭原则 (Princípio do Aberto/Fechado)
你应该能够在不修改类本身的情况下扩展其行为。
原则上,我们可以扩展现有的代码,或者使用新的功能,修改现有的代码。这是一个存在的重大问题,也是一个可能存在 bug 的机会。举例来说,这是反映原则的一个例子,但前面的例子是,我们可以通过计算不同的逻辑来进行计算(即责任的结果)不同)。从新的角度来看,我们的批评已经发生了变化。
//without solid
class Provider {
calculateCost(): number {
if (this.type == 'email') {
//
} else if (this.type == 'internet') {
//
} else {
//
}
}
}
//with solid
interface Provider {
calculateCost(): number;
}
class EmailProvider implements Provider {
calculateCost(): number {
}
}
class InternetProvider implements Provider {
calculateCost(): number {
}
}
[L]iskov 替换原理 (Princípio da Substituição de Liskov)
设 Φ(x) 是关于类型为 T 的对象 x 的可证明性质。那么对于类型为 S 的对象 y,Φ(y) 应该为真,其中 S 是 T 的子类型。
最初,这是一个简单的原则。类的意义是从类中派生出来的,类的发展是由其替代的。没有任何例子,因为类之间的关系是一种执行方法的能力:
//without solid
class Bird {
walk(): void {
//
}
fly(): void {
//
}
}
class Duck extends Bird {}
class Owl extends Bird {}
//with solid
class Bird {
walk(): void {
//
}
}
class FlyingBird extends Bird {
fly(): void {
//
}
}
class AquaticBird extends Bird {
swim(): void {
//
}
}
class Duck extends AquaticBird {}
class Owl extends FlyingBird {}
接口隔离原则 (Princípio da Segregação de Interfaces)
创建针对特定客户端的细粒度接口。
基本原则是维护接口类别的开发依赖于接口的连接和使用、发送请求、优先接口(特别是通用接口)的基本要素。继续示例:
//without solid
interface Stream {
read(): void;
write(): void;
}
class Reader implements Stream {}
class Writer implements Stream {}
//with solid
interface ReadableStream {
read(): void;
}
interface WritableStream {
write(): void;
}
class Reader implements ReadableStream {}
class Writer implements WritebleStream {}
class DuplexStream implements ReadableStream, WritableStream {}
[D]依赖倒置原理(Princípio da Inversão de Dependências)
要依赖抽象概念,而不是具体细节。
抽象取决于具体的类。结合具体的类,作为完整算法的实现。 O conceito da inversão de dependentência tem como objetivo tornar as mais desacopladas, fazendo com que se Torem mais sustentáveis and testáveis.没有一个例子,一个类是完全依赖于外部服务的。作为替代方案,您可以通过接口连接、发送可能的套管针以实现依赖(例如,使用测试或更改服务或使用外部服务):
//without solid
class CloudNotificationService {
sendMessage(): void {
//
}
}
class Transaction {
private notificationService: CloudNotificationService;
constructor(notificationService: CloudNotificationService) {
this.notificationService = notificationService;
}
save(): void {
//...
this.notificationService.sendMessage();
}
}
//with solid
interface NotificationService {
sendMessage(): void;
}
class CloudNotificationService implements NotificationService {
sendMessage(): void {
//
}
}
class Transaction {
private notificationService: NotificationService;
constructor(notificationService: NotificationService) {
this.notificationService = notificationService;
}
save(): void {
//...
this.notificationService.sendMessage();
}
}
吻
保持简单,笨蛋
Esse é certamente o meu首先喜欢。重要的是,作为简单的方法,您可以在所有的应用程序中进行操作。重要的是要采取一些简单的实用方法,以各种方法和各种方式,应用到责任、组织和组织中,以提高人们的福祉。我们建议您在生活中充分考虑到这一点,但不要开发软件。
亚格尼
你不需要它
XP(极限编程)方法的本质是一种不需要开发的辅助方法,但不能使用它。没有任何问题是关于过度工程的,或者说,我们需要解决一个复杂的问题,即未来的情况是不存在的。
干燥
不要重复自己
DRY é sobre não repetir código desnecessariamente。您可以重新利用永远可能的可能性,通过智能管理,您可以轻松地重新利用永远可能的可能性和龙卷风的变化。
分布式驱动
领域驱动开发 (Desenvolvimento Orientado a Domínio) 是一个重要标志。软件的主宰是一个具有重要意义的区域。本质上,前面的概念是不一样的,软件模型的概念是为了支持一个组织机构,它是独立于子领域的,签证是独立的责任,设计和软件反映了形式的明确性。 domínio para o qual foram criados。在设计建筑模型时,我们必须考虑到一些有趣的事情或在项目中涉及到的所有语言。
测试驱动开发
测试驱动开发(Desenvolvimento Orientado a Testes)是一种提议的方法,也是测试驱动开发的主要功能和实现的一部分。我们的方法是根据特定的睾丸进行操作,并根据可能的情况进行修改。这个主题是关于政治的,所有涉及到的问题都是我们在实践中的主要工作和主要工作节奏。 Sim、de fato、os testes são código、e como qualquer outro código、precisam de manutenção、refatoração 等。 Porém、se aplicado da forma correta、com 纪律、pode trazer excelentes ganhos a médio/longo prazo。
结论
一个关于所有想法的想法:produzir um código de qualidade。这对使用来说是非常重要的,因为软件的生产速度非常快,因此您可以在遇到困难时将其作为可能的操作进行调整。 Muitos dos dos conceitos tem umspecto comportamental e podem trazer Benefícios para sua vida além do trabalho como desenvolvedor。
Isso é tudo pessoal。 Espero que tenham curtido e sintam-se a vontade para eniar dúvidas, sugestões, Feedback eo que mais desejarem.
Referências:
https://khalilstemmler.com/articles/solid-principles/solid-typescript/
https://scotch.io/bar-talk/solid-the-first-five-principles-of-object-oriented-design
https://khalilstemmler.com/wiki
文章来源:https://dev.to/thiagomr/desvendando-o-mundo-magico-dos-acronimos-solid-kiss-yagni-dry-ddd-tdd-2onp