Code Monkey home page Code Monkey logo

netcracker-courses-labs's Introduction

nc-lab

Лабораторная работа №1

Есть три типа контрактов

Контракт на мобильную связь
Контракт на проводной интернет
Контракт на цифровое телевидение

Все типы контрактов имеют поля

ID
Дата начала контракта
Дата окончания контракта
Номер контракта
Владелец контракта(Сущность Человек)

Кроме того

Контракт на мобильную связь имеет свойства(количество минут, смс и Гб трафика)
Контракт на проводной интернет - скорость соединения
Контракт на цифровое телевидение - пакет каналов

Сущность Человек имеет свойства

ID
Фамилия Имя Отчеcтво
Дата рождения
Пол
Серия и номер паспорта
Вычисляемое свойство - возраст

Необходимо создать репозиторий, который позволял бы хранить контракты этих типов. Репозиторий должен позволять добавлять произвольное количество контрактов, удалять контракты по ID, получать контракты по ID В этом задании нельзя использовать встроенные коллекции. Репозиторий должен быть создан на основе массива, с использованием механизма расширения, который будет вызываться, если места для добавления не хватает.

Лабораторная работа №2

Добавить возможность поиска по репозиторию по различным критериям. Нужно определить метод, который бы принимал в качестве параметра критерии поиска и возвращал результаты поиска по этим критериям. Критерии поиска передаются через предикаты(см. класс Predicate). Результатом поиска будет объект класса вашего репозитория Добавить возможность сортировки по различным критериям:

Нужно описать интерфейс ISorter который будет содержать метод sort принимающий, в том числе, компаратор. Нужно описать несколько классов-имлементаций этого интерфейса(например BoubleSorter, MergeSorter или типа того) Далее, использовать эти классы для сортировки в репозитории. Важный момент: критерий сортировки должен передаваться через компараторы(см. класс Comparator).

Лабораторная работа №3

Работа с CSV файлом

Дан csv файл который содержит информацию о контрактах. Список полей вы определяете исходя из свое модели. Как пример это:

  • ДатаНачалаКонтракта;
  • ДатаКонцаКонтракта;
  • ФИОКлинета;
  • ПолКлиента;
  • ДатаРождения;
  • ДанныеПаспорта;
  • ТипКонтракта;
  • ДопИнформацияПоКонтракту;

Все поля, кроме последних двух, можно подгонять под вашу модель. Предпоследнее поле определяет тип контракта(мобильный, тв или интернет). Последнее поле содержит в себе специфичную для каждого типа контракта информацию. Например для мобильного контракта там находится информация о тарифном плане(минуты, гигабайты, смс). Для ТВ - кпакет каналов и т.д

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

Для чтения из файла можно использовать либо стандартные бибилотеки Java IO (см. FileReader и BufferReader) или специальную библитеку(например opencsv)

Лабораторная работа №4

Разработать механиз валидации контракта.

Для этого необходимо создать классы которые могли бы проверять переданный им в качестве параметра контракт и возвращать в качестве результата объект, сожержащий информацию о результатате проверки. результат проверки должен содержать:\

  • Статус проверки(например, ок, error, red risk и т.п.)
  • Некий текст описывающий ошибку(если она есть)
  • Далее, опционально на усмотрение(например, можно возвращать имя поля, в котором была найдена ошибка) Добавить использование валидаторов в класс загрузчик CSV.

Лабораторная работа №5

Рефлексия и DI

  1. Создать аннотацию AutoInjectable(или любое другое название). Данной аннотацией будут помечаться поля классов для которых нужно будет осуществить внедрение зависимости
  2. Создать аннотацию Configuration(или любое другое название) со свойством packages(массив String). Данное свойство будет хранить в себе имена пакетов, где нужно будет искать классы, инстансы которых будут внедряться в поля, помеченные аннотацией AutoInjectable
  3. Создать класс Injector(или любое другое имя), который будет осуществлять внедрение зависимостей. Данный класс помечаем аннотацией Configuration. По ее свойству packages определяем в каких пакетах будем искать классы Создаем метод что-то типа public static T inject(T object){....} В этот метод будет передаваться некий объект куда надо осуществить внедрение зависимостей. В теле метода Ищем поля класса, которые помечены аннотацией AutoInjectable Если это простое поле(не коллекция) то ищем класс, среди пакетов, которые указаны в конфигурации, который может быть внедрен(совпадают интерфейсы, или наследники или еще что - правило по которому ищется класс можете придумать сами). Если таких классов больше одного - выкидываете исключение. Если таких классов нет - выкидываете исключение. Если такой класс один - создаете экземпляр и внедряетет его в поле Если поле типа коллекции, то тогда делаем тоже, что и в пункте два, только без проверки на количество классов(сколько нашли, столько и внедрили в коллекцию) Протестировать инъекцию на классе репозитории(пометив поле сортировщика(sorter) аннотацией AutoInjectable)и на Csv loader пометив этой аннотацией поле со списком валидаторов.

netcracker-courses-labs's People

Contributors

ad-riaz avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.