До сих пор я написал много веб-приложений для баз данных (MySQL), но я всегда думаю, что моя структура немного неуклюжа. Я хочу улучшить шаблон программирования / дизайна, который я использую, надеясь получить здесь несколько советов. В частности, я не могу найти структуру, которая дополняет ООП-подход, который инкапсулирует реализацию базы данных (схемы). я
Думаю, мой вопрос лучше всего объяснить на примере. Есть два подхода, которые я сейчас использую, говорят, что у меня есть объект / класс Invoice:
во-первых, использовать статические функции-члены
class Invoice
{
int id;
string ref;
int customer_id;
date created;
date due;
static id create();
static bool update(id, field1, field2, ...);
static bool delete(id);
static bool get(id);
};
Второй подход - поместить все в объект базы данных:
class Database extends ProprietaryDBConnecter, Singleton
{
id createInvoice();
bool updateInvoice(id, field1, field2, ...);
bool deleteInvoice(id);
bool getInvoice(id);
id createCustomer();
bool updateCustomer(id, field1, field2, ...);
bool deleteCustomer(id);
bool getCustomer(id);
// etc...
}
Я обнаружил, что оба способа (SQL) функции-члены очень неотделимы от «представления», в том смысле, что «представление» определяет, что должны иметь классы, и, следовательно, кажется, нарушает архитектуру документа / представления.
Кроме того, это кажется неэффективным, например, оператор SELECT должен выбирать только то, что необходимо, но наличие переменных-членов в Invoice, по-видимому, подразумевает «гарантированные данные».
Не знаю, четко ли я объяснил вопрос: каковы некоторые другие лучшие подходы к этой архитектуре / шаблону проектирования / что это такое известно?
Спасибо за советы
Похоже, вы описываете несоответствие объектно-реляционного импеданса .
Есть ряд вещей, которые должны решить эта OODBMS, инструменты ORM, множество инструментов доступа к данным.
Я думаю, что тот факт, что существует так много решений, заставляет меня поверить, что One True Solution ™ не существует.
Таким образом, вы можете выбрать любое безопасное направление, зная, что некоторые люди будут его ненавидеть, а некоторые будут любить его.
источник
Если вы не хотите использовать оболочку ORM, используйте базу данных, которая поддерживает хранилище в стиле ООП, например MongoDB .
источник