Autor | Zpráva | ||
---|---|---|---|
HoneyBunny Profil |
Dobrý den, pokousil jsem se vytvořit jednoduchý DDD model a jelikož jsem začátečník v Nette, tak by mě zajímalo, jestli jsem ho udělal správně. Omlouvám se, pokud Vám příjde můj příspěvek hloupý, ale chtěl jsem to raději s někým probrat než ho v praxi využiju.
config.neon: services: users: Users(UsersDAO) usersDatabaseMapper: UsersDatabaseMapper factories: usersDAO: UsersDAO Users.php: <?php class Users { private $dao; public function __construct($dao) { $this->dao = $dao; } public function getUsername() { return $this->dao->username; } } UsersDAO.php: <?php class UsersDAO { private $mapper; public function __construct(IUserMapper $mapper) { $this->mapper = $mapper; } public function find($id) { return new Users($this->mapper->find($id)); } } <?php use Nette\Database\Connection, Nette\Database\Table\Selection; class UsersDatabaseMapper extends Selection implements IMapper, IUserMapper { public function __construct(Connection $connection) { parent::__construct('users', $connection); } public function find($id) { return $this->where(array('id' => $id))->fetch(); } } Použití: <?php $dao = $this->context->createUsersDAO($this->context->usersDatabaseMapper); $user = $dao->find(1); //získání dat uživatele s id 1 dump($user->getUsername()); //vrátí: admin |
||
Nox Profil |
#2 · Zasláno: 12. 5. 2012, 14:42:59
Přijde mi zvláštní, že Users a UsersDAO mají stejně pojmenovanou závislost, ale pokaždé jde o něco jiného. Třída by asi měla být User, ne Users, pokud nejde o kolekci (což tu nejde). Navíc Users je ve finále vlastně dvojobalem nad určitými daty, kde v tomto konkrétním zápisu ani jeden nepřidává žádnou hodnotu.
S tímto řešením taky předpokládej tuny opakujícího se kódu, ono to asi bude vypadat hezky a čistě, ale toho psaní navíc bude kopec. Co objekt to zvláštní mapper, interface pro mapper, dao, entita + gettery... taky jsem párkrát takto jel, ale je to na mašli... Pokud to má být k něčemu většímu a fakt bys to takto chtěl dělat, tak určitě doporučuju si na začátku napsat nějaké generátory kódu Jinak ... má jít vlastně o ORM? Vyrábíš to protože chceš/tě to baví/na vyzkoušení, nebo čistě účelně? Protože pak prostě použil Doctrine2, pokud teda chceš něco takového |
||
HoneyBunny Profil |
Děkuji za odpověď. Hledám náhradu za Active Record, kterou jsem v Nette používal, ale časté upravy a nepořádek v kódu mě donutil vyskoušet něco jiného. Na Doctrine2 jsem koukal, ale nevím jak dlouho bych strávil učením se něčeho nového (zrovna teď nemám moc času nazbyt), takže proto jsem skusil takovýto přístup. Mimochodem, co jste myslel generátorem kódu (případně co by měl generovat)?
|
||
Nox Profil |
#4 · Zasláno: 12. 5. 2012, 16:14:48
Jestli budeš mít takových entit jako User víc, budeš pořád muset zakládat všechny ty soubory a psát všechny getXYZ funkce, to je šílená zdržovačka (a taky nuda), tak si prostě napsat něco co to udělá za tebe
|
||
Časová prodleva: 12 let
|
0