DT Dart  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Архитектура крупного Flutter-приложения

Тест по теме «Архитектура крупного Flutter-приложения» охватывает «Слои», «Зависимости», «Доменные модели», «Модульность», «Совместимость и переносимость» и «Стратегия тестирования». В 30 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 18; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 30
Что в поведении этого кода гарантировано правилами темы «Слои», а не случайно совпало в одном запуске?
DartDart · Слои · семантика
final class LoadDashboard {
  LoadDashboard(this.orders, this.clock);
  final OrderRepository orders;
  final Clock clock;

  Future<Dashboard> call(UserId user) async {
    final items = await orders.recentFor(user, since: clock.now().subtract(const Duration(days: 30)));
    return Dashboard.fromOrders(items);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 2 из 30
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Слои» отвечает этому требованию?
DartDart · Слои · исправление
final class LoadDashboard {
  LoadDashboard(this.orders, this.clock);
  final OrderRepository orders;
  final Clock clock;

  Future<Dashboard> call(UserId user) async {
    final items = await orders.recentFor(user, since: clock.now().subtract(const Duration(days: 30)));
    return Dashboard.fromOrders(items);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 3 из 30
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Слои» нельзя проверять одним общим ожиданием?
DartDart · Слои · границы
final class LoadDashboard {
  LoadDashboard(this.orders, this.clock);
  final OrderRepository orders;
  final Clock clock;

  Future<Dashboard> call(UserId user) async {
    final items = await orders.recentFor(user, since: clock.now().subtract(const Duration(days: 30)));
    return Dashboard.fromOrders(items);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 4 из 30
Какой контракт по теме «Слои» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 5 из 30
Какой сценарий должен стать постоянной проверкой после исправления «Слои»?
Вопрос 6 из 30
Какое утверждение о показанном фрагменте и теме «Зависимости» опирается на реальную гарантию Dart или используемого интерфейса?
DartDart · Зависимости · семантика
final class CheckoutViewModel {
  CheckoutViewModel(this.checkout, this.analytics);
  final Checkout checkout;
  final Analytics analytics;
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 7 из 30
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Зависимости» всё ещё нужно проверить раздельно?
DartDart · Зависимости · границы
final class CheckoutViewModel {
  CheckoutViewModel(this.checkout, this.analytics);
  final Checkout checkout;
  final Analytics analytics;
}

// Контекст задания: анализ граничных входов.
Вопрос 8 из 30
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Зависимости» отвечает этому требованию?
DartDart · Зависимости · исправление
final class CheckoutViewModel {
  CheckoutViewModel(this.checkout, this.analytics);
  final Checkout checkout;
  final Analytics analytics;
}

// Контекст задания: выбор места исправления.
Вопрос 9 из 30
Перед обновлением зависимости нужно защитить исправление «Зависимости». Какая проверка подходит лучше всего?
Вопрос 10 из 30
Какой контракт по теме «Зависимости» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 11 из 30
Какой вариант правки убирает источник дефекта «Доменные модели» и не заставляет клиентов дублировать защиту?
DartDart · Доменные модели · исправление
final class Order {
  Order._(this.id, this.lines);
  final OrderId id;
  final List<OrderLine> lines;

  Money get total => lines.fold(Money.zero, (sum, line) => sum + line.total);

  static Order create(OrderId id, List<OrderLine> lines) {
    if (lines.isEmpty) throw const EmptyOrder();
    return Order._(id, List.unmodifiable(lines));
  }
}

// Контекст задания: выбор места исправления.
Вопрос 12 из 30
Код проходит обычный сценарий. Какие проверки по теме «Доменные модели» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Доменные модели · границы
final class Order {
  Order._(this.id, this.lines);
  final OrderId id;
  final List<OrderLine> lines;

  Money get total => lines.fold(Money.zero, (sum, line) => sum + line.total);

  static Order create(OrderId id, List<OrderLine> lines) {
    if (lines.isEmpty) throw const EmptyOrder();
    return Order._(id, List.unmodifiable(lines));
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 13 из 30
Что в поведении этого кода гарантировано правилами темы «Доменные модели», а не случайно совпало в одном запуске?
DartDart · Доменные модели · семантика
final class Order {
  Order._(this.id, this.lines);
  final OrderId id;
  final List<OrderLine> lines;

  Money get total => lines.fold(Money.zero, (sum, line) => sum + line.total);

  static Order create(OrderId id, List<OrderLine> lines) {
    if (lines.isEmpty) throw const EmptyOrder();
    return Order._(id, List.unmodifiable(lines));
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 14 из 30
Как сформулировать публичное обещание темы «Доменные модели», не привязывая клиента к конкретному классу?
Вопрос 15 из 30
Перед обновлением зависимости нужно защитить исправление «Доменные модели». Какая проверка подходит лучше всего?
Вопрос 16 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Модульность»?
DartDart · Модульность · исправление
library checkout_feature;

export 'src/checkout_page.dart' show CheckoutPage;
export 'src/checkout_routes.dart' show checkoutRoutes;
// Internal repositories and DTOs are not exported.

// Контекст задания: выбор места исправления.
Вопрос 17 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Модульность»?
DartDart · Модульность · семантика
library checkout_feature;

export 'src/checkout_page.dart' show CheckoutPage;
export 'src/checkout_routes.dart' show checkoutRoutes;
// Internal repositories and DTOs are not exported.

// Контекст задания: проверка семантики фрагмента.
Вопрос 18 из 30
Код проходит обычный сценарий. Какие проверки по теме «Модульность» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Модульность · границы
library checkout_feature;

export 'src/checkout_page.dart' show CheckoutPage;
export 'src/checkout_routes.dart' show checkoutRoutes;
// Internal repositories and DTOs are not exported.

// Контекст задания: анализ граничных входов.
Вопрос 19 из 30
Ручная проверка по теме «Модульность» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 20 из 30
Как сформулировать публичное обещание темы «Модульность», не привязывая клиента к конкретному классу?
Вопрос 21 из 30
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Совместимость и переносимость» должен появиться рядом?
DartDart · Совместимость и переносимость · границы
abstract interface class ShareGateway {
  Future<ShareResult> share(ShareRequest request);
}

final class ShareReport {
  ShareReport(this.gateway);
  final ShareGateway gateway;
  Future<ShareResult> call(Uint8List bytes) => gateway.share(ShareRequest.file(bytes));
}

// Контекст задания: анализ граничных входов.
Вопрос 22 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Совместимость и переносимость»?
DartDart · Совместимость и переносимость · исправление
abstract interface class ShareGateway {
  Future<ShareResult> share(ShareRequest request);
}

final class ShareReport {
  ShareReport(this.gateway);
  final ShareGateway gateway;
  Future<ShareResult> call(Uint8List bytes) => gateway.share(ShareRequest.file(bytes));
}

// Контекст задания: выбор места исправления.
Вопрос 23 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Совместимость и переносимость»?
DartDart · Совместимость и переносимость · семантика
abstract interface class ShareGateway {
  Future<ShareResult> share(ShareRequest request);
}

final class ShareReport {
  ShareReport(this.gateway);
  final ShareGateway gateway;
  Future<ShareResult> call(Uint8List bytes) => gateway.share(ShareRequest.file(bytes));
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 24 из 30
Две реализации решают задачу «Совместимость и переносимость» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 25 из 30
Ручная проверка по теме «Совместимость и переносимость» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 26 из 30
Обычный путь в коде зелёный. Как построить проверку «Стратегия тестирования», чтобы не пропустить различия между отказами?
DartDart · Стратегия тестирования · границы
test('domain rejects an order without lines', () {
  expect(() => Order.create(OrderId('o-1'), const []), throwsA(isA<EmptyOrder>()));
});

test('repository maps a server response to a domain order', () async { /* boundary test */ });

// Контекст задания: анализ граничных входов.
Вопрос 27 из 30
Что здесь следует считать правилом «Стратегия тестирования», а что — лишь деталью текущей реализации?
DartDart · Стратегия тестирования · семантика
test('domain rejects an order without lines', () {
  expect(() => Order.create(OrderId('o-1'), const []), throwsA(isA<EmptyOrder>()));
});

test('repository maps a server response to a domain order', () async { /* boundary test */ });

// Контекст задания: проверка семантики фрагмента.
Вопрос 28 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Стратегия тестирования»?
DartDart · Стратегия тестирования · исправление
test('domain rejects an order without lines', () {
  expect(() => Order.create(OrderId('o-1'), const []), throwsA(isA<EmptyOrder>()));
});

test('repository maps a server response to a domain order', () async { /* boundary test */ });

// Контекст задания: выбор места исправления.
Вопрос 29 из 30
Какая регрессия для «Стратегия тестирования» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 30 из 30
Две реализации решают задачу «Стратегия тестирования» по-разному. Какое требование делает их взаимозаменяемыми для клиента?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу