куда поместить код подключения к MySQL из MCPKit в cocoa

#mysql #cocoa #class #frameworks #database-connection

#mysql #cocoa #класс #фреймворки #database-connection

Вопрос:

Я пытаюсь спланировать, куда поместить мой код подключения к MySQL —

MCPConnection *conn = [[MCPConnection alloc] initToHost:@"" withLogin:@"" usingPort:@""];

и т.д. Из MCPKit на Mac. Моя цель — создать как можно меньше экземпляров подключения во всем приложении (по возможности, только один будет потрясающим).

Единственные 3 места, о которых я могу подумать, чтобы поместить его, это —

  • Приложение делегирует, но тогда как бы я использовал то же соединение в других классах (инкапсуляция данных)

  • Разместите код в каждом окне / контроллере представления, который требует от него выполнения каждой отдельной цели (но это означает намного больше кода и большое количество подключений, которые мне не нужны).

  • Или, наконец, настройка отдельного класса для всех запросов MySQL и отдельного соединения. (но тогда как это сделать, чтобы методы в этом классе были легко вызываемыми, или чтобы инструкции / запросы SQL могли быть достаточно адаптивными для любого другого класса, который использует методы).

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

Спасибо, что уделили мне время.

Ответ №1:

В качестве простого решения вы можете использовать шаблон Singleton и заменить код инициализации вызовом static getInstance. Единственным общедоступным методом одноэлементной оболочки будет getConnection, который затем вы используете как обычно. Да, вы можете перенести обычные методы построения sql в этот класс, но это приводит к раздуванию кода, лучше использовать шаблон Flyweight для запросов отдельного типа.

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

Комментарии:

1. Спасибо за ваш вклад, но я многого не смог понять, не могли бы вы объяснить это для меня более простыми терминами?