← Назад к вопросам

Какие знаешь архитектуры разработки ПО?

2.3 Middle🔥 251 комментариев
#SOLID и паттерны проектирования

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Архитектуры разработки ПО

Архитектура — это фундаментальная организация системы, определяющая её структуру, компоненты, взаимодействие и принципы разработки.

1. Монолитная архитектура (Monolithic)

Все компоненты в одном приложении.

// Структура
src/
├── controllers/
├── services/
├── repositories/
├── models/
└── utils/

// Один jar файл, одна БД
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        return userService.create(user);
    }
}

Преимущества:

  • Простая разработка
  • Легко тестировать
  • Хорошая производительность
  • Легко разворачивать

Недостатки:

  • Сложно масштабировать
  • Технологическая связанность
  • Один сбой — падает всё
  • Медленное развитие при больших командах

2. Микросервисная архитектура (Microservices)

Система разделена на независимые сервисы.

// Сервис 1: User Service
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
    @PostMapping
    public User createUser(@RequestBody User user) { ... }
}

// Сервис 2: Order Service
@RestController
@RequestMapping("/api/v1/orders")
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;
    
    @PostMapping
    public Order createOrder(@RequestBody Order order) {
        // Вызов User Service через REST
        User user = restTemplate.getForObject(
            "http://user-service:8080/api/v1/users/" + order.getUserId(),
            User.class
        );
        return orderService.create(order);
    }
}

Преимущества:

  • Независимое масштабирование
  • Быстрое развитие
  • Разные технологии для разных сервисов
  • Высокая отказоустойчивость

Недостатки:

  • Сложность разработки
  • Усложненное тестирование
  • Сетевые задержки
  • Сложность отладки

3. Трёхслойная архитектура (Three-Tier)

Разделение на слои: Presentation → Business Logic → Data Access.

// Presentation Layer
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @PostMapping("/users")
    public ResponseEntity<UserDTO> createUser(@RequestBody UserRequest request) {
        User user = userService.create(request);
        return ResponseEntity.ok(new UserDTO(user));
    }
}

// Business Logic Layer
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    public User create(UserRequest request) {
        User user = new User(request.getName(), request.getEmail());
        return userRepository.save(user);
    }
}

// Data Access Layer
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByEmail(String email);
}

Преимущества:

  • Четкое разделение ответственности
  • Легко тестировать
  • Понятная структура

Недостатки:

  • Может быть над-инжиниринг для простых проектов
  • Слабая изоляция слоев

4. MVC архитектура (Model-View-Controller)

Разделение на модель, представление и контроллер.

// Model
@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
}

// View (в REST это JSON/XML)
// Контролер выбирает, какой View вернуть

// Controller
@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        // View будет JSON представление User
        return userRepository.findById(id).orElse(null);
    }
}

5. MVVM архитектура (Model-View-ViewModel)

Используется в frontend (Angular, WPF).

Да, это Java DevChat, но MVVM важна для понимания архитектур.

// Backend могу вернуть DTO которая служит ViewModel
@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public UserViewModel getUser(@PathVariable Long id) {
        User user = userService.getUser(id);
        return new UserViewModel(user);  // Трансформация для UI
    }
}

6. Event-Driven архитектура

Компоненты взаимодействуют через события.

// Event
public class UserCreatedEvent {
    private Long userId;
    private String email;
}

// Producer
@Service
public class UserService {
    @Autowired
    private ApplicationEventPublisher eventPublisher;
    
    public User create(User user) {
        user = userRepository.save(user);
        eventPublisher.publishEvent(new UserCreatedEvent(user.getId(), user.getEmail()));
        return user;
    }
}

// Consumer
@Service
public class EmailService {
    @EventListener
    public void onUserCreated(UserCreatedEvent event) {
        sendWelcomeEmail(event.getEmail());
    }
}

7. Чистая архитектура (Clean Architecture)

Зависимости направлены к центру (Domain).

// Domain Layer (независимый)
public class User {
    private Long id;
    private String name;
}

// Application Layer
@Service
public class CreateUserUseCase {
    private final UserRepository userRepository;
    
    public User execute(CreateUserRequest request) {
        User user = new User(request.getName());
        return userRepository.save(user);
    }
}

// Infrastructure Layer
@Repository
public class UserRepositoryImpl implements UserRepository {
    @Autowired
    private UserJpaRepository jpaRepository;
    
    public User save(User user) {
        return jpaRepository.save(new UserEntity(user));
    }
}

// Presentation Layer
@RestController
public class UserController {
    @Autowired
    private CreateUserUseCase createUserUseCase;
    
    @PostMapping("/users")
    public User create(@RequestBody CreateUserRequest request) {
        return createUserUseCase.execute(request);
    }
}

8. Сравнение архитектур

АрхитектураСложностьМасштабируемостьБыстрота разработкиТестируемость
МонолитНизкаяНизкаяВысокаяХорошая
МикросервисыОчень высокаяОчень высокаяНизкаяСложная
ТрехслойнаяСредняяСредняяСредняяХорошая
MVCНизкаяНизкаяВысокаяХорошая
Event-DrivenСредняяВысокаяСредняяСредняя
Clean ArchitectureВысокаяВысокаяНизкаяОтличная

9. Выбор архитектуры

  • Монолит — стартап, MVP, 1-3 разработчика
  • Трехслойная — стандартное веб-приложение
  • Микросервисы — большое приложение, много команд
  • Clean Architecture — долгосрочный проект с высокими требованиями
  • Event-Driven — системы с асинхронной обработкой

Итог

Выбор архитектуры зависит от размера проекта, количества разработчиков, требований масштабируемости и планов на будущее. Нет универсального решения — каждая архитектура имеет свои плюсы и минусы.

Какие знаешь архитектуры разработки ПО? | PrepBro