Я недавно опубликовал этот C ++ DAL вопрос о том, как лучше всего спроектировать метод loadCar в C ++ DLL, с единодушным мнением, что 'bool DAL :: loadCar (int id, Car &) {} 'будет лучшей подписью для использования.
Теперь, случается, что во многих наших случаях использования клиентский код часто хочет получить производителя автомобиля с помощью объекта автомобиля. Таблица 'car' в базе данных имеет внешний ключ (MANUFACTURER_ID) для таблицы производителя. Теперь я думаю о наличии дополнительного поля в классе Car, например:
class Car
{
public:
void setModel(...);
void setEngineSize(...);
Manufactuer getManufacturer();
private:
Manufactuer /* Reference, Pointer or Value - TBD */ manufacturer_;
// etc.
};
Вопрос в том, будет ли у вас закрытый член производителя в качестве указателя, ссылки или простого типа значения, то есть одного из:
Manufactuer *manufacturuer;
Manufactuer &manufacturuer; // Illegal - needs to be initialised, so use Null Obj Pattern?
Manufactuer manufacturuer;
Теперь метод loadCar будет иметь параметр bool loadManufactuer (по умолчанию false). То есть мы только хотим, чтобы стоимость и затраты на хранение загружали производителя время от времени. Это заставляет меня думать, что я должен хранить производителя как указатель (1-й вариант).
Обратите внимание, причина, по которой я не делаю композицию на более высоком уровне, заключается в том, что я хочу, чтобы DAL мог составлять производителя автомобилей + с помощью одного запроса к базе данных. Обратите внимание, что, хотя здесь и не показано, пользователь может запросить коллекцию объектов Car.
Я не был уверен в использовании указателя, так как мне кажется, что я сейчас смешиваю указатели со ссылками, но не могу понять, как это можно сделать в противном случае без введения большого количества временных переменных. Может быть, Нулевой Объект Singleton поможет?
Надеюсь, что это имеет смысл.