Đây có phải là cách chính xác để mở rộng các lớp cha và con của Grails không?Mở rộng lớp miền với mối quan hệ một-nhiều trong Grails
Ban đầu tôi nghĩ rằng ghi đè thuộc tính hasMany và thuộc tính, sẽ là một ý tưởng hay nhưng điều đó không hoạt động tốt như nó đã giới thiệu chức năng xung đột vì vậy tôi đã loại bỏ nó khỏi các lớp con.
Điều tôi đang cố gắng làm ở đây là đóng gói mã được chia sẻ giữa nhiều ứng dụng. Tôi bắt đầu với hai lớp này trong plugin của tôi.
class Purchase {
String firstName
String lastName
static mapping = {
tablePerHierarchy false
}
static hasMany = [items: PurchaseItem]
}
class PurchaseItem {
BigDecimal price
Integer qty
statiuc belongsTo = [purchase: Purchase]
static mapping = {
tablePerHierarchy false
}
}
Ứng dụng các lớp cụ thể cần phải mở rộng cả Mua PurchaseItem vì vậy tôi đang thực hiện nó như vậy, kế thừa một-nhiều mối quan hệ:
class Flight {
static hasMany = [purchases: TicketPurchase]
}
class TicketPurchase extends Purchase {
// some class specific properties
static belongsTo = [flight: Flight]
}
class TicketPurchaseItem extends PurchaseItem
Integer bagQty
static namedQueries = {
ticketPurchaseItemsWithBagsByFlight {flightInstance->
purchase {
flight {
eq 'id', flightInstance.id
}
}
gt 'bagQty', 0
}
}
}
Các namedQuery trong TicketPurchaseItem tham gia Mua Flight thậm chí Mặc dù Super Class Purchase không thuộc về Flight, chỉ có lớp con TicketPurchase thực hiện.
TicketPurchase ticketPurchase = new TicketPurchase()
ticketPurchase.addToItems(new TicketPurchaseItem(bagQty: 5)).save()
Flight flight = Flight.first()
flight.addToPurchases(ticketPurchase).save()
// this works
def ticketPurchaseItemList = TicketPurchaseItem.ticketPurchaseItemsWithBagsByFlight(flight)
Điều này làm việc với Grails nhưng có thiết kế tốt hay cách tốt hơn để xử lý các lớp miền mở rộng mối quan hệ một-nhiều?