ฉันได้อ่านเกี่ยวกับการใช้แบบจำลองที่เกี่ยวข้องกับแบบจำลองไขมันในผิวหนังรวมถึง DRY ที่เป็นไปตามรหัสรุ่น นี่คือคำอธิบายพร้อมตัวอย่าง:
1) DRYING ค่ารหัสรุ่น
พิจารณาโมเดลบทความโมเดลเหตุการณ์และโมเดลข้อคิดเห็น บทความหรือเหตุการณ์มีความคิดเห็นมากมาย ความคิดเห็นเป็นของบทความหรือเหตุการณ์
ตามเนื้อผ้ารุ่นอาจมีลักษณะเช่นนี้
รูปแบบความคิดเห็น:
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
ดังที่เราสามารถสังเกตเห็นได้ว่ามีส่วนสำคัญของรหัสทั่วไปสำหรับทั้งเหตุการณ์และบทความ ด้วยความกังวลเราสามารถแยกรหัสทั่วไปนี้ในโมดูลที่แยกต่างหากแสดงความคิดเห็นได้
สำหรับสิ่งนี้ให้สร้างไฟล์ commentable.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
* ในขณะที่ใช้ความกังวลมันแนะนำให้ไปสำหรับการจัดกลุ่มตาม 'โดเมน' มากกว่าการจัดกลุ่ม 'ทางเทคนิค' การจัดกลุ่มตามโดเมนคือ 'ความเห็นได้', 'ภาพถ่ายได้', 'เข้าร่วมได้' การจัดกลุ่มทางเทคนิคจะหมายถึง 'ValidationMethods', 'FinderMethods' ฯลฯ