Каков правильный способ группировать этот проект в классы?

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

  1. Получить учетные данные пользователя FTP (имя пользователя и пароль).
  2. Убедитесь, что учетные данные устанавливают правильное подключение к FTP-серверу.
  3. Запросить несколько списков Sharepoint и объединить результаты этих запросов, чтобы создать список элементов, которые должны быть приняты на них.
  4. В каждом элементе списка есть папка. Для каждого элемента:
    • Замените содержимое папки.
    • Загрузите папку на FTP-сервер с помощью SFTP
    • Обновите данные Sharepoint элемента.
  5. Отправлять пользователю отчет Excel, показывающий, например,
    • Элементы без путей к папке
    • Элементы, которые не удалось выполнить zip или загрузить

Этапы 2-5 выполняются на периодической основе; если шаг 2 возвращает недопустимое соединение, пользователь получает предупреждение и процесс возвращается к шагу 1. Если в любой момент пользователь нажимает определенный ключ, процесс завершается.

Я определил следующий набор классов, каждый из которых находится в собственном файле .cs:

SFTP: процессы передачи файлов

DataHandler: процессы поиска /обработки данных SharePoint. Также делает и загружает zip-файлы.

Exceptions: не только один класс, это файл .cs, где у меня есть все мои классы исключений.

Report: строит и отправляет отчет.

Program: Основной класс для запуска программы.

Я признаю, что класс DataHandler является объектом божества , но у меня нет хорошая идея как его реорганизовать. Я чувствую, что он должен быть более мелким, чем просто разбивать его на Sharepoint, Zip и Upload, но, возможно, это все.

Кроме того, я еще не разработал, как объединить периодическое поведение с частью «ждать входа пользователя в любой момент процесса»; Я думаю, что это включает в себя потоки, что означает другие классы для управления потоками ...

Я не настолько хорошо разбираюсь в шаблонах дизайна, но есть ли подходящий для этого проекта?

Если это слишком большая тема для аккуратного объяснения в ответе SO, я также соглашусь с ссылкой на хороший учебник о том, что я пытаюсь сделать здесь.

4 голоса | спросил sigil 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 02:53:26 +0400 2012, 02:53:26

2 ответа


2

@Emmad ударил ноготь по голове запиской о единой ответственности.

Если вы следуете подходу Behavior Driven к дизайну классов (игнорируя все единицы тестирования на данный момент и думая больше о строках поведения, которые ваша программа должна поддерживать), вы можете начать с объектов, которые представляют отдельные области например, вы можете получить отдельные классы для каждого из следующих

  • Пользовательский обработчик ввода
  • Пользовательские учетные данные (простой объект или структура данных?)
  • Проверка учетных данных пользователя
  • Запрос Sharepoint
  • Папка-компрессор
  • Отправитель папки
  • Подключение к FTP
  • Sharepoint Updater
  • Sharepoint Connection
  • Отчет (простой объект или структура данных?)
  • построитель отчетов
  • Отправитель отчетов
  • Подключение по электронной почте

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

В общем, проще добавить сложность к простому классу, чем упростить что-то, что начиналось сложным в первую очередь; Точно так же, если вы закончите работать с решением и решите, что некоторые из классов должны быть объединены вместе, тогда это также легче сделать, чем разделить один класс, который начался слишком много. (Помните, что проблемы редко настолько тривиальны, как кажется на первый взгляд, особенно если вы не начинаете думать об управлении потоком ошибок, протоколировании отладки, одноразовых ресурсах и т. Д. - что-то, что начинается с «О, мы можем сделать это с помощью одной строки кода «может оказаться намного больше одной строки)

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

ответил Ben Cottrell 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 08:05:12 +0400 2012, 08:05:12
1

DataHandler, не соответствует SRP. Он делает несколько разных вещей. Возможно, вам не хватает класса (или более), который будет отвечать за ведение учетных данных пользователя (создание, обновление, удаление) пользователя. Кроме того, вы можете обрабатывать отчет Excel отдельно от отправки по электронной почте отчета (2 класса не 1), поскольку отчет представляет собой процесс отправки отчета Excel, это две разные обязанности.

ответил NoChance 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 03:00:15 +0400 2012, 03:00:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132