Я думаю, что вам не хватает хотя бы одной абстракции, то есть множества всех проектов. Давайте назовем эту вещь ProjectPortfolio
. Тогда я бы, возможно, пойти с этим дизайном (в синтаксисе Java):
public interface ProjectPortfolio {
Project createProject(...);
Project findById(...);
}
public interface Project {
void delete();
void update(...);
void assignEmployees(...);
boolean isDeadlineExceeded();
}
public interface Manager {
void updateInfo(...);
void addQualification(...);
}
Мне кажется, вы пытаетесь поместить методы в Manager
, потому что менеджер - это тот, кто их делает. Обычно методы должны быть на объекте, на который воздействуют («субъект» действия).
Так, например, если вы хотите delete()
проект, этот метод должен быть (исключая другие требования) для объекта Project
.
Поэтому, когда вы хотите createProject()
, вы должны найти подходящий «предмет», где эта операция имеет смысл.
Думайте об этом так: вы находитесь внутри приложения, вы окружены объектами, которые являются вашими друзьями, с которыми вы пытаетесь заставить приложение работать. Поэтому вы должны спросить себя: К кому я могу обратиться, чтобы помочь мне? . Например, для createProject()
я могу попросить одного из моих Manager
друзей по объекту? Нет , потому что эти ребята просто представляют некоторых реальных людей, они не знают, как создать проект. И Project
объекты представляют один уже созданный проект. Поэтому вы должны написать нового друга по имени ProjectPortfolio
, который знает обо всех проектах. :)