Каков лучший шаблон проектирования для PHP, когда Class_a только иногда нуждается в информации Class_b? - PullRequest
3 голосов
/ 17 июля 2010

Этот проект написан на PHP, но не зависит от языка. Я строю проект, который имеет следующий формат MVC

Main_Class
Main_Class_Common
  --> Class_A
  --> Class_B
  --> Class_C
  --> Class_...
  --> Class_K

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

Например,

Main_Class
Main_Class_Common
  --> Class_Projects
  --> Class_Clients

Обычно Class_Projects никогда не нужны данные от Class_Clients, за исключением одной функции, которую может потребоваться вызвать $class_clients->get_client_details($client_id);, и то же самое иногда происходит в обратном порядке.

Но оба класса должны иметь возможность вызывать $main_class_common->clean_input($myinput);.

В настоящее время я использую Class class_a extends main_class_common() для доступа к общим функциям, который работает отлично. Но - это лучший способ получить доступ к Class_B из Class_A, чтобы просто периодически обращаться к глобальной переменной $ class_b, или я должен переместить возможные общие функции в Main_Class_Common, даже если они используются только время от времени? В настоящий момент проект находится на ранней стадии разработки, поэтому текущая реализация может быть легко изменена.

1 Ответ

1 голос
/ 18 июля 2010

Шаблон репозитория подходит здесь. Создайте класс Class_ProjectRepository и класс Class_ClientRepository, которые содержат такие методы, как get_client_details($client_id).

Классы контроллеров MVC будут использовать репозитории. Например, Class_Projects и Class_Clients могут использовать Class_ClientRepository для получения сведений о клиенте.

Классы хранилища создадут запрос и вызовут ваш DAL. Кроме того, если вам нужны фактические доменные объекты, такие как Class_Client, в контроллере, вы также должны сделать репозитории ответственными за преобразование наборов результатов DAL в доменные объекты.

...