我们拥有AccountService , 它负责多项工作:记录 , 验证和操作用户余额 。同样 , 未实施TDA 。我们应该分开验证并创建外部记录器 , 以备将来在其他模块中使用 。
适当的SoC的示例:
/** * VALIDATORS */class StringLengthValidator {static greaterThan(value: string, length: number): boolean {if ( value.length > length){return true} else {throw new Error("String is not long enough.");}}}class UserBalanceValidator {static haveEnoughFunds(user: User, amount: number): boolean {return (user.getBalance() - amount) > 0;}}/** * INTERFACES */interface IUserAccount {_id: string;name: string;balance: number;}/** * CLASSES */class User implements IUserAccount {_id: string = '';name: string = '';balance: number = 0;constructor(name) {this._id = this._generateRandomID();this.setName(name);}private _generateRandomID() {return Math.random().toString(36).substring(7);}getId(): string {return this._id;}setName(name: string): User {StringLengthValidator.greaterThan(name, 2);this.name = name;return this;}getBalance(): number {return this.balance;}setBalance(amount: number): User {this.balance = amount;LoggerService.log("User " + this.getId() + " now has " + this.getBalance() );return this;}}class LoggerService {static log(message: string): string {message = (new Date()) + " :: " + message;console.log(message);return message;}}class AccountService {transfer(fromUser: User, toUser: User, amount: number): any {if (!UserBalanceValidator.haveEnoughFunds(fromUser, amount)) {LoggerService.log("User " + fromUser.getId() + " has not enough funds.");return {fromUser, toUser};}fromUser.setBalance(fromUser.getBalance() - amount);toUser.setBalance(toUser.getBalance() + amount);return {fromUser, toUser}}updateBalance(user: User, amount: number) : User {user.setBalance(user.getBalance() + amount);return user;}}const aService = new AccountService();let u1 = new User("john");let u2 = new User("bob");u1 = aService.updateBalance(u1, 1000);u2 = aService.updateBalance(u2, 500);console.log( aService.transfer(u1, u2, 250) );
现在我们每个类都有各自的状态和功能:验证器 , 用户 , AcocuntService和LoggerService 。由于SoC , 我们可以在应用程序的许多不同模块中分别使用它 。而且 , 由于存在逻辑的位置较少 , 因此该代码更易于维护 。
YAGNI:您将不需要它该原则不是在告诉我们如何直接在代码中执行某些操作 , 而是告诉我们如何有效地进行编码 。总的说来 , 我们应该只编写在特定时刻需要我们编写的内容 。例如:当我们必须对电子邮件和密码字段进行验证时 , 我们不应该对名称进行验证 , 因为我们可能永远不需要它 。确实是TDD:我们仅针对微功能编写测试 , 并为此编写最少的代码 。" YAGNI"正试图节省我们的时间 , 专注于冲刺中最重要的事情 。
那就是所有的内容我希望通过这篇文章 , 您学到了一些东西 , 或者提醒了您已经知道的一些东西 。:)
【如何成为一个更好的程序员?设计原则I:KISS,DRY...】
推荐阅读
- 葛根如何泡茶才最好,茉莉花茶如何喝
- 淘宝卖家怎么查看每个月的销售额 如何查看淘宝销售总额
- pion一个开源的流媒体框架
- C++基础入门
- 淘宝店铺如何修改价格 淘宝下单如何修改价格
- 淘宝账号如何找回密码 淘宝帐号被盗了怎么找回
- 淘宝如何设置折扣价 淘宝价格折扣怎么设置
- 淘宝合并支付怎么让对方代付 淘宝如何合并代付款
- 淘宝关联宝贝什么意思 淘宝如何关联
- 淘宝代销如何发货 淘宝卖家代发怎么发货