আমি ত্বক-নাইট ফ্যাট মডেলগুলিতে মডেল উদ্বেগগুলি ব্যবহার করার পাশাপাশি আপনার মডেল কোডগুলি ডিআরওয়াই সম্পর্কে পড়ছি । উদাহরণ সহ একটি ব্যাখ্যা এখানে:
1) মডেল কোডগুলি DRYing করা
একটি নিবন্ধ মডেল, একটি ইভেন্ট মডেল এবং একটি মন্তব্য মডেল বিবেচনা করুন। একটি নিবন্ধ বা একটি ইভেন্ট অনেক মন্তব্য আছে। একটি মন্তব্য নিবন্ধ বা ইভেন্ট হয়।
Ditionতিহ্যগতভাবে, মডেলগুলি এর মতো দেখতে পারে:
মন্তব্য মডেল:
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
end
নিবন্ধ মডেল:
class Article < ActiveRecord::Base
has_many :comments, as: :commentable
def find_first_comment
comments.first(created_at DESC)
end
def self.least_commented
#return the article with least number of comments
end
end
ইভেন্ট মডেল
class Event < ActiveRecord::Base
has_many :comments, as: :commentable
def find_first_comment
comments.first(created_at DESC)
end
def self.least_commented
#returns the event with least number of comments
end
end
আমরা লক্ষ্য করতে পারি যে, ইভেন্ট এবং নিবন্ধ উভয়ের জন্যই একটি উল্লেখযোগ্য কোডের কোড রয়েছে। উদ্বেগগুলি ব্যবহার করে আমরা এই সাধারণ কোডটি একটি পৃথক মডিউলে মন্তব্যযোগ্য হিসাবে বের করতে পারি।
এর জন্য অ্যাপ / মডেল / উদ্বেগগুলিতে একটি মন্তব্যযোগ্য.rb ফাইল তৈরি করুন।
module Commentable
extend ActiveSupport::Concern
included do
has_many :comments, as: :commentable
end
# for the given article/event returns the first comment
def find_first_comment
comments.first(created_at DESC)
end
module ClassMethods
def least_commented
#returns the article/event which has the least number of comments
end
end
end
এবং এখন আপনার মডেলগুলি দেখতে এইরকম:
মন্তব্য মডেল:
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
end
নিবন্ধ মডেল:
class Article < ActiveRecord::Base
include Commentable
end
ইভেন্ট মডেল:
class Event < ActiveRecord::Base
include Commentable
end
2) স্কিন-নাইজিং ফ্যাট মডেলগুলি।
একটি ইভেন্টের মডেল বিবেচনা করুন। একটি ইভেন্টে অনেক উপস্থিতি এবং মন্তব্য রয়েছে।
সাধারণত, ইভেন্টের মডেলটি দেখতে এটির মতো হতে পারে
class Event < ActiveRecord::Base
has_many :comments
has_many :attenders
def find_first_comment
# for the given article/event returns the first comment
end
def find_comments_with_word(word)
# for the given event returns an array of comments which contain the given word
end
def self.least_commented
# finds the event which has the least number of comments
end
def self.most_attended
# returns the event with most number of attendes
end
def has_attendee(attendee_id)
# returns true if the event has the mentioned attendee
end
end
অনেক সমিতির সাথে মডেলগুলির এবং অন্যথায় আরও বেশি সংখ্যক কোড জড়িত এবং নিয়ন্ত্রণহীন হওয়ার প্রবণতা রয়েছে। উদ্বেগগুলি ত্বক-আকারের ফ্যাট মডিউলগুলিকে আরও মোডুলারাইজড এবং বোঝার জন্য সহজ করে তোলে।
উপরের মডেলটি নীচে হিসাবে উদ্বেগগুলি ব্যবহার করে রিফ্যাক্টর করা যেতে পারে: অ্যাপ / মডেল / উদ্বেগ / ইভেন্ট ফোল্ডারে একটি attendable.rb
এবং commentable.rb
ফাইল তৈরি করুন
attendable.rb
module Attendable
extend ActiveSupport::Concern
included do
has_many :attenders
end
def has_attender(attender_id)
# returns true if the event has the mentioned attendee
end
module ClassMethods
def most_attended
# returns the event with most number of attendes
end
end
end
commentable.rb
module Commentable
extend ActiveSupport::Concern
included do
has_many :comments
end
def find_first_comment
# for the given article/event returns the first comment
end
def find_comments_with_word(word)
# for the given event returns an array of comments which contain the given word
end
module ClassMethods
def least_commented
# finds the event which has the least number of comments
end
end
end
এবং এখন কনসার্ন ব্যবহার করে আপনার ইভেন্টের মডেলটি হ্রাস পেয়েছে
class Event < ActiveRecord::Base
include Commentable
include Attendable
end
* উদ্বেগগুলি ব্যবহার করার সময় 'প্রযুক্তিগত' গ্রুপিংয়ের পরিবর্তে 'ডোমেন' ভিত্তিক গ্রুপিংয়ের পরামর্শ দেওয়া উচিত। ডোমেন ভিত্তিক গোষ্ঠীকরণ 'মন্তব্যযোগ্য', 'ফটোটেবল', 'উপস্থিতিযোগ্য' এর মতো। প্রযুক্তিগত গোষ্ঠীকরণের অর্থ 'বৈধকরণমাথোডস', 'ফাইন্ডার ম্যাথডস' ইত্যাদি etc