Ben OOP / OOD oldukça yeniyim, ve ben öğrenmek için bir şey var fark, bu yüzden onların giriş için SO topluluk sormak istiyorum.
Temelde, ben CakePHP'nin MVC framework kullanıyorum ve ben yapıyorum online mağaza sadece deyimleri oluşturuyor aşağıdaki tarif 2 modelleri, Kategori ve Ürün, kullanıyor:
CREATE TABLE `categories` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(255) default NULL,
`parent_id` int(11) default NULL REFERENCES categories(`id`),
`lft` int(11) default NULL,
`rght` int(11) default NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `products` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(255) default NULL,
`artist_id` int(11) default NULL REFERENCES artists(`id`),
`description` text default NULL,
`category_id` int(11) default NULL REFERENCES categories(`id`),
`status` enum('in stock', 'pre-order', 'out of stock') NOT NULL,
`price` decimal(6,2) default NULL,
`picture` varchar(255) default NULL,
`picture2` varchar(255) default NULL,
PRIMARY KEY (`id`)
);
Online mağaza kapsayacak şekilde gidiyor:
- Music
- CD'ler
- DVD'ler
- Apparel
- Hoodies
- T-shirts
- Uzun kollu Tees
- Babydolls
- Şapkalar
- Misc Merch
- Etiketler
- Posterler
- Tote Çanta
- Downloads
- Zil
- MP3'ler
Gelecekte yeni kategoriler ekleyebilir olsa da, temelde, yani kategori ağacın yapısı bulunuyor. Şu anda tüm ürünler kendi category_id ürünlerin farklı ayırt etmek için tek yol olmak, Ürün sınıfı nesneler olarak eşit muamele yapılmaktadır. Online mağaza da sitenin sadece bir bölümüdür. Sitenin geri kalanı, sanatçı biyografisi ve diskografilerini gibi bilgileri içerir; böylece ben de için modeller / tablolar var: Artist, Album, Track.
Bu iyi bir yaklaşım mı? Yoksa CD'ler/T-shirts/MP3'ler / ... Ürün sınıfından devralan için ayrı alt sınıflarını yaratmak olmalıdır? Ben otomatik parça listeleri ve ürün açıklaması için diğer bilgi üretmek için diskografisi giriş deposunda her müzik CD'si bağlamak istiyorum.
Bu şeyler hakkında gitmek için iyi bir yol değilse, bunu nasıl yerine yapardınız? Ayrıca, hangi yöntemleri / özellikleri benim Kategori / Ürün sınıfta içermelidir? Ve ben sadece kategori ağacının yaprak düğümlerin ürünler listesi gerekir?
Edit:
Obviously this design is incomplete. As Cyril pointed out, the Product.price field was missing, and there are still no provisions for sales. I'm actually still trying to work out how best to design & implement those aspects of the store. Most likely, I will just have another model called Orders, but actually processing orders is made more complicated by the fact that we are applying different shipping rates based on shipping destination and what the order contains.