Организация кода и дизайн для многократно используемой библиотеки почтовых клиентов - PullRequest
0 голосов
/ 04 мая 2011

У меня есть несколько проектов, в которых используется imap_* набор функций из расширения PHP IMAP.

Задача состоит в том, чтобы получать почту с mailhost, выполнять некоторую обработку и, основываясь на результатах, сохранять их в БД или отвечать на письма (т. Е. Неверный формат запроса задачи)

Работа с функциями imap_* является задачей очень низкого уровня, с большим количеством повторяющегося кода, поэтому я дошел до того, что мне следует реализовать некоторую унифицированную библиотеку, которая будет охватывать функции imap и позволит мне работать над высокоуровневые, четко определенные классы / интерфейсы / фабрики объектов и т. д.

Вопрос в том, как мне организовать классы / код для этой задачи? Я знаю, что плохо спроектированная библиотека - это хуже, чем вообще никакой библиотеки:)

[EDIT]

Моя первоначальная идея состояла в том, чтобы создать класс Transport, который будет оборачивать соединение, скрыть дескриптор почтового ящика (результат imap_open) внутри частного свойства и использовать функции imap_* с помощью волшебства __call. Класс Secod будет AccessManager, который будет использовать класс Transport и позаботиться о логике извлечения почты, а может быть, и третьим Message фабрикой объектов? Или Message класс должен иметь статический инициализатор ::createFromSomething()?

1 Ответ

0 голосов
/ 05 мая 2011

Я бы создал следующие классы:

  • ImapClient (GetFolders, SendMessage, Search)
  • FolderCollection
  • Папка (GetMessages)
  • MessageCollection
  • Сообщение
...