Как разделить проблему на более мелкие понятные части?

StackOverflow https://stackoverflow.com/questions/932966

  •  06-09-2019
  •  | 
  •  

Вопрос

Не уверен, что на эту тему можно дать общий совет, но попробуйте.Мой случай сложно объяснить, потому что его слишком сложно объяснить.И это именно проблема.

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

Есть ли какие-либо общие советы или рекомендации о том, как рассматривать мою систему по частям?Как найти меньшие порции, которые можно было бы разработать отдельно?

Это было полезно?

Решение

Ваши ключевые цели:

  • Высокая сплоченность:Код (методы, поля, классы) внутри одного куска/модуля/раздела должен интенсивно взаимодействовать;должно иметь смысл чтобы эти элементы знали друг о друге.Если вы обнаружите, что некоторые из них мало взаимодействуют с остальными, возможно, они принадлежат где-то еще или им следует создать собственный раздел.Если вы обнаружите, что код снаружи интенсивно взаимодействует с разделом и слишком много знает о его внутренней работе, вероятно, ему место внутри.Типичный пример можно найти в объектно-ориентированном коде, написанном в процедурном стиле, с «глупыми» объектами данных и «менеджерским» кодом, который работает с ними, но на самом деле должен быть частью объектов данных.
  • Слабая связь:Взаимодействие между части/модули/разделы должны осуществляться только через узкие, четко определенные и хорошо документированные API.Попробуйте идентифицировать такие API и посмотреть, какой код необходим для их реализации и какой код будет их использовать.

Другие советы

Создайте глоссарий.

Другими словами, определите термины, которые имеют значение для предметной области проекта — не с точки зрения программиста, а с точки зрения пользователя, который знаком с предметом.

Затем определите термины как именно так и дискретно как вы можете.Хорошее определение в такой форме может служить своего рода псевдокодом.

Поскольку вы не определили даже область своей проблемы, я выберу случайный пример.В системе гражданского персонала могут использоваться такие термины, как:

  • заготовка:срок службы (от даты начала до даты окончания) на определенном уровне и ступени
  • сотрудник:серия заготовок, связанных с конкретной ССН
  • сорт и ступень:строка и столбец федерального генерального графика

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

Полезно подходить к декомпозиции проблемы как сверху вниз, так и снизу вверх.

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

Когда я копирую и вставляю фрагменты кода с минимальными изменениями, я понимаю, что это «раздел», а затем создаю класс, метод, функцию или что-то еще.

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

Вот попытка, своего рода дикая догадка.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top