Я использую PHP, если это имеет значение, и я отслеживаю продукты с классом Product. Конструктор принимает один параметр, который является идентификатором продукта. Затем конструктор переходит в базу данных и получает всю информацию о продукте и задает все свойства для этого экземпляра. После выполнения всех операций пользователь может вызвать функцию save(), и новая информация обновит продукт в базе данныхOOP, разбивающий класс на создание и использование
Если идентификатор продукта установлен в ноль в конструкторе, то класс продукта понимает что это новый продукт и не получает ни одной из переменных. Он позволяет вам устанавливать все переменные и проверять их. Затем, когда вы вызываете функцию save(), она создает продукт и устанавливает идентификатор продукта в новый идентификатор, который был присвоен строке в базе данных.
Проблема, с которой я сталкиваюсь, состоит в том, что некоторые функции нельзя вызывать, если продукт создается и еще не был сохранен, поскольку он не имеет идентификатора. Поэтому в каждый момент времени, когда вызываются некоторые функции, я должен проверить, что ID> 0.
Мне было интересно, нужно ли разделить класс на класс только для создания и класс для использования существующего продукта (например, Product и CreateProduct). Преимущество этого заключается в том, что класс Product всегда может предположить, что продукт уже создан, поэтому мне не нужно его проверять, и все методы проверки могут быть перемещены в отдельный класс и лучше управляться.
Просто хотел услышать мнения и рекомендации. Спасибо, Alex
Я думаю, что на других языках это были бы только два разных конструктора, один из которых снабжал идентификатор, а другой - нет. –
Если вы уверены, что экземпляр продукта будет каким-то образом сохранен, вы не можете зарезервировать идентификатор в базе данных, вставив пустую строку из своего конструктора? Затем в методе «save» вы действительно сделаете обновление db, чтобы продукт был вновь создан или нет. Таким образом, любой сконструированный продукт будет иметь идентификатор (который часто используется конструктором = для получения объекта, который «безопасен» для использования). – darma
(Возможно, существует путаница между программным объектом, который является временным, и резидентным «объектом» базы данных, который является постоянным. Эти два являются отдельными, физически и концептуально, хотя программный объект является чем-то вроде «doppelganger» резидентный объект базы данных.) –