Всем привет! Меня зовут Николай, я начинающий .NET разработчик. Мною было написано это консольное приложение, эмулирующее работу парковки.
Несмотря на то, что требованием было именно консольное приложение, я решил пойти немного вперёд и использовать классическую трёхуровневую архитектуру (о чём немного пожалел чуть позже 😅). Я подумал, что так получиться сделать код менее связанным и обеспечить некую модульность.
-
ParkingEmulator.Console - своеобразный слой представления, который отвечает непосредственно за работу с консолью (получение и валидация данных от пользователя, декор консоли).
-
ParkingEmulator.Core - ядро, слой всей логики приложения. Я старался писать его таким образом, чтобы он никаким образом не зависел от других слоёв (вроде получилось 😏).
-
ParkingEnulator.Log - слой, который отвечает за логирование данных и чтёние логов из файла.
- Добавить машину на парковку
- Убрать машину с парковки
- Пополнить баланс машини стоящей на парковке машины
- Вывести список стоящих на парковке машин
- Вывести количество свободных мест
- Вывести транзакции за последнюю минуту (берутся из оперативной памяти)
- Вывести всю историю транзакций (считывается из файла Transactions.log)
- Вывести общий доход
- Изменить цены на парковку для разных типов машин
- Изменить общее количество парковочных мест
- Изменить штраф за парковку
- Каждые 3 секунды со счетов всех автомобилей на стоянке списываются средства в зависимости от типа машины
- Каждую минуту в файл Transactions.log записываются транзакции за последнюю минуту
- Каждые 3 минуты из списка транзакций удаляются транзакции, которым больше 2 минут (это нужно, чтобы очистить оперативную память, ведь пользователь может получить доступ только к транзакциям за последнюю минуту, да и к тому же эти транзакции уже залогированы в файл)
На самом деле начиналось всё бодрячком 😆. Архитектура была спланирована вроде нормально. Код писался чисто и красиво. Но, когда я начал пилить конкретно слой представления (консоль), то тут начались некоторые проблемы. Я начал жёстко путаться и теряться в своём же коде, очень много хардкодил и т.д.😟. В итоге я не совсем доволен своим результатом. Я бы оценил его так:
- Задумка архитектуры - 8/10
- Функционал - 7/10
- Качество кода - 4/10 (особенно стыдно за ParkingEmulator.Console)
Если после клонирования проекта вы попытаетесь его сбилдить и получите такую ошибку: "Проект, создающий библиотеку классов, не может быть непосредственно запущен.", то вам нужно сделать это