باستخدام الأساليب والحقول ذات الصلة بالفرس في كيان الثبات

StackOverflow https://stackoverflow.com/questions/4037506

سؤال

لديّ رمز Java-EE المرتبط بالثبات والذي أحتاجه إلى إعادة كتابة التطبيق على التطبيق على محرك تطبيق Google وتخزين البيانات الخاص به. عندما أستخدم مزودي ثبات Java-ee ، أقوم بإنشاء كيانات ثبات مع IDE وأبقيهم بالطريقة التي هم في حالة حاجة إليها لتجديدها. ومع ذلك ، فإن فئات الكيانات التلقائية لتخزين محرك التطبيق غير ممكن ، وأود أن أعرف ما إذا كانت هناك أي أسباب وجيهة تجعلني أبقي فصول الكيان نظيفة وعدم استخدام الحقول والأساليب غير المرتبطة مباشرة بالمثابرة. أستخدم الهدف كمزود ثبات إذا كان مهمًا.

هذا مثال:

public class Dog {
  @Id Long id;
  @Transient Integer barkCount;

  public String bark() {
    barkCount++;
    return "woof-woof";
  }

  public String getAgeEstimation() {
    switch(barkCount) {
      case 0:     return "unborn (or very lazy)";
      case 10000: return "this is very old dawg";
      default:    return "you get the idea :)";
    }
  } 
}
هل كانت مفيدة؟

المحلول

أود أن أعرف ما إذا كانت هناك أي أسباب وجيهة تجعلني أبقي فصول الكيان نظيفة وعدم استخدام الحقول والأساليب غير المرتبطة مباشرة بالمثابرة.

لا حرج في إضافة أساليب لا تتعلق بشكل مباشر بالمثابرة ولكن القيام بالأعمال التجارية مع البيانات التي تم استردادها من مخزن البيانات - وتنفيذ فعليًا نموذج المجال الغني (مقابل نموذج مجال فقر الدم).

لذا ، بدلاً من الحصول على خدمات النمط الإجرائي ، انقل منطق العمل داخل كائن مجال غني. على سبيل المثال (مأخوذة من تصميم يحركه المجال مع Java EE 6):

@Entity
public class Load {

    @OneToMany(cascade = CascadeType.ALL)
    private List<OrderItem> orderItems;
    @Id
    private Long id;

    protected Load() {
        this.orderItems = new ArrayList<OrderItem>();
    }

    public int getShippingCosts() {
        int shippingCosts = 0;
        for (OrderItem orderItem : orderItems) {
            shippingCosts += orderItem.getShippingCost();
        }
        return shippingCosts;
    }
//...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top