// 领域模型
interface User {
id: string;
name: string;
email: string;
}
// 存储库接口
interface IUserRepository {
findById(id: string): Promise<User | null>;
save(user: User): Promise<void>;
delete(id: string): Promise<void>;
}
// 验证接口
interface IUserValidator {
validate(user: User): boolean;
}
// 通知接口
interface IUserNotifier {
notifyUserCreated(user: User): Promise<void>;
}
// 日志接口
interface ILogger {
log(message: string): void;
}
// 具体实现
class UserRepository implements IUserRepository {
async findById(id: string): Promise<User | null> {
// 数据库实现
return null;
}
async save(user: User): Promise<void> {
// 保存到数据库
}
async delete(id: string): Promise<void> {
// 从数据库删除
}
}
class UserValidator implements IUserValidator {
validate(user: User): boolean {
return user.email.includes('@') && user.name.length > 0;
}
}
class EmailNotifier implements IUserNotifier {
async notifyUserCreated(user: User): Promise<void> {
console.log(`发送欢迎邮件给 ${user.email}`);
}
}
class ConsoleLogger implements ILogger {
log(message: string): void {
console.log(`[LOG] ${message}`);
}
}
// 用户服务 - 符合所有SOLID原则
class UserService {
constructor(
private userRepository: IUserRepository,
private userValidator: IUserValidator,
private userNotifier: IUserNotifier,
private logger: ILogger
) {}
async createUser(userData: Partial<User>): Promise<User> {
const user: User = {
id: this.generateId(),
name: userData.name!,
email: userData.email!
};
if (!this.userValidator.validate(user)) {
throw new Error('无效的用户数据');
}
await this.userRepository.save(user);
await this.userNotifier.notifyUserCreated(user);
this.logger.log(`用户已创建: ${user.id}`);
return user;
}
private generateId(): string {
return Math.random().toString(36).substr(2, 9);
}
}