मैं एक मतदान प्रणाली है, जहां कई डोमेन वस्तुओं पर मतदान किया जा सकता है बनाना चाहते हैं:क्या यह एक कारखाने के लिए एक अच्छा उम्मीदवार है?
- एक कैलेंडर ईवेंट
- एक टिप्पणी
- एक उपयोगकर्ता
तो मैं सोचा मैं पैदा करेगा इन मदों के लिए Voteable
इंटरफ़ेस:
interface Voteable
{
public function vote(User $user, $value);
}
मुझे लगा कि यह vote
विधि प्रॉक्सी भंडार विधि होगा, की तरह कुछ:
class VotingRepository
{
public function castVote(Voteable $item, User $user, $value)
{
// save the these values, along with the value
$itemId = $item->getId();
$userId = $user->getId();
}
}
अभी के लिए, भंडार एक डाटाबेस हो जाएगा।
- eventVote
- commentVote
- userVote
तो, यह अनिवार्य रूप से मतलब है कि प्रत्येक डोमेन वस्तु को वोट डालने के लिए एक और मेज की जरूरत है: इस डेटाबेस वोट के प्रत्येक प्रकार के लिए टेबल जोड़ने होगा । क्या यह कारखाने के लिए एक अच्छा उम्मीदवार होगा? इस मामले में VotingRepositoryFactory
? कुछ की तरह दूसरे शब्दों में:
class VotingRepositoryFactory
{
createVotingRepository($type)
{
switch($type)
{
case 'event':
// create a voting repository with EventVote table
return new VotingRepository(new EventVoteTable());
case 'comment':
// create a voting repository with CommentVote table
return new VotingRepository(new CommentVoteTable());
case 'user':
// create a voting repository with UserVote table
return new VotingRepository(new UserVoteTable());
}
}
}
फिर
, यह सब एक साथ बांधने डोमेन वस्तुओं के भीतर से, (उदाहरण के लिए इस मामले में टिप्पणी), मैं कुछ इस तरह दिखेगा:
class Comment implements Voteable
{
public function construct()
{
$this->_repository = VotingRepositoryFactory::createVotingRepository('comment');
}
public function vote(User $user, $value)
{
$this->_repository->castVote($this, $user, $value);
}
}
इस करता है सही बात?
बस याद रखें कि डिज़ाइन पैटर्न से बहुत दूर नहीं जाना है। प्रभावी ढंग से और समझदारी से उपयोग किए जाने पर डिजाइन पैटर्न सुरुचिपूर्ण और आसानी से बनाए रखने योग्य कोड बनाते हैं। हालांकि, आप दीवार पर अपनी घड़ी को लटकाने के लिए 10 फीट मचान बनाने के गड़बड़ी से बचना चाहते हैं। उस ने कहा, मुझे बहुत ज्यादा मचान के पक्ष में गलती करना पसंद है। ;-) –
@ जेफ: मैं सुन रहा हूं कि आप क्या कह रहे हैं। हालांकि वेबसाइट कम से कम महत्वाकांक्षी परियोजना होगी (कम से कम मेरे लिए)। तो मुझे यह गिट जाने से जितना संभव हो सके उतना ही बनाए रखना पसंद है। –