【问题标题】:Implementing One-to-One unidirectional association in Java在 Java 中实现一对一的单向关联
【发布时间】:2015-12-12 06:25:46
【问题描述】:

如何在 Java 中实现一对一的单向关联(无 ORM)。我认为双向是可能的。关联意味着两个类(比如 Part 和 PartNumber)需要独立存在,一对一意味着一个部件只有一个部件号,反之亦然,单向意味着部件应该知道部件号但相反。现在零件号如何知道它是否已经分配。如果我们牺牲 PartNumber 的独立存在,那么它的组合。

【问题讨论】:

  • 你是在告诉我们还是在问我们?
  • 哦,下次一定会注意的。

标签: java associations uml


【解决方案1】:

您可以将其实现为单向或双向关联。要么会工作。可以通过多种方式确保 1 对 1 属性保持不变:

  • 在双向情况下,让设置者使用正向或反向链接来确保另一端的对象尚未相关,并且可能会破坏这种关系。

  • 在单向情况下,通过删除设置零件的PartNumberPartNumberPart 的能力;例如让Part 在其构造函数中创建自己的PartNumber

另一种选择是将PartNumber 设为“基于值的类”,并始终使用PartNumber.equals(Object) 来测试是否相等。

【讨论】:

  • 同意斯蒂芬的第一部分,但关于第二部分,我很困惑它不会变成合成(因为部分编号仍然在部分内部并被部分破坏)?
  • 可能是的。但这有关系吗?
【解决方案2】:

我在这里找到了一个实现:http://programmersthing.blogspot.in/2017/06/java-concepts.html

    1.Customer Class :
    import java.util.ArrayList;

    public class Customer {
        private String name;
        ArrayList<Order> orders = new ArrayList<Order>();

        public Customer(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public ArrayList<Order> getOrders() {
            return orders;
        }

        public void addOrder(Order order) {
            orders.add(order);
        }

    }

    2.LineItem  Class :

    public class LineItem {
        private int quantity;
        Product products;

        public LineItem(int quantity, Product products) {
            this.quantity = quantity;
            this.products = products;
        }

        public double calculateLineItemCost() {
            return (quantity * products.calculatePriceAfterDiscount());
        }

        public int getQuantity() {
            return quantity;
        }

        public Product getProducts() {
            return products;
        }

    }

【讨论】:

  • 这个“答案”不过是来自外部来源的代码引用。是的;您添加了指向源代码的链接,但从某个地方转储一些代码肯定不是本社区精神的答案
  • 我不认为上面的代码提供了与上述约束的必要关系。
  • 基于以上讨论,我得出结论,Java 无法实现一对一的单向关系(组合是可能的)。从某种意义上说,这种关系本身就是矛盾的,因为第二个对象在不知道它连接了多少个第一个对象的情况下不能服从约束(由于单向导航,这是不可能的)。如果这不是正确的理解,请发表评论..
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
相关资源
最近更新 更多