我为这个问题的主观性而道歉,但我有点卡住了,我希望以前能够处理这个问题的人提供一些指导和建议:
我有(成为什么)一个用C#2.0编写的非常大的RESTful API项目,我的一些类变得非常可怕.我的主要API类就是一个例子 - 有几十个成员和方法(可能接近数百个).你可以想象,它变成了一个小噩梦,不仅仅是维护这段代码,甚至只是导航代码已经成为一件苦差事.
我是SOLID原则的新手,我是设计模式的忠实粉丝(但我仍处于可以实现它们的那个阶段,但还不足以知道何时使用它们 - 在不太明显的情况下) .
我需要打破我的班级规模,但我不知道如何最好地去做.我的StackOverflower伙伴能否建议他们采用现有的代码单块并将其缩小到适当大小?
我理解聚合和组合之间的区别,但我在关联方面有点挣扎.我目前的理解是,当"它们彼此使用"时,类之间存在关联,例如,在方法调用期间将一个对象传递给另一个对象.也可以看看:
http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit
两个对象都是独立存在的,与聚合相反,没有对象是另一个对象的容器类.这是否意味着两个对象必须具有其他对象的副本(例如1:m关系)或者如何"存储"关联.任何反馈都将非常感激.
在我的项目中,我有两个域模型.父母和子实体.父级引用子权利列表.(例如,帖子和评论)两个实体都有它们的弹簧数据JPA CrudRepository<Long, ModelClass>接口,它们被公开为@RepositoryRestResource
HTTP GET和PUT操作正常工作,并返回这些模型的漂亮HATEOS表示.
现在我需要一个特殊的REST端点"创建一个引用一个或多个现有子实体的新Parent ".我想将对子项的引用作为text/uri-list发布,我在请求正文中传递,如下所示:
POST http://localhost:8080/api/v1/createNewParent
HEADER
Content-Type: text/uri-list
HTTP REQUEST BODY:
http://localhost:8080/api/v1/Child/4711
http://localhost:8080/api/v1/Child/4712
http://localhost:8080/api/v1/Child/4713
Run Code Online (Sandbox Code Playgroud)
如何实现此休止端点?这是我到目前为止所尝试的:
@Autowired
ParentRepo parentRepo // Spring Data JPA repository for "parent" entity
@RequestMapping(value = "/createNewParent", method = RequestMethod.POST)
public @ResponseBody String createNewParentWithChildren(
@RequestBody Resources<ChildModel> childList,
PersistentEntityResourceAssembler resourceAssembler
)
{
Collection<ChildModel> childrenObjects = childList.getContent()
// Ok, this gives me the URIs I've posted
List<Link> links = proposalResource.getLinks();
// But now how to convert these URIs to domain objects???
List<ChildModel> …Run Code Online (Sandbox Code Playgroud) 有多少书自相矛盾,让我抓狂。
Class A {} class B {void UseA(A a)} //some say this is an association,
no reference is held but communication is possible
Class A {} class B {A a;} //some say this is
aggregration, a reference is held
Run Code Online (Sandbox Code Playgroud)
但是很多人说持有引用仍然只是一个关联,并且为了聚合他们使用一个列表 - 恕我直言,这是一样的,它仍然是一个引用。
我很困惑,我想了解这个问题。
例如这里:http : //aviadezra.blogspot.cz/2009/05/uml-association-aggregation-composition.html - 强关联和聚合之间的区别是什么,在这两种情况下,作者都使用一个字段来存储引用。 .
另一个例子:这据说是关联:

这被称为聚合:

public class Professor {
// ...
}
public class Department {
private List<Professor> professorList;
// ..
}
Run Code Online (Sandbox Code Playgroud)
再次,有什么区别?它是两种情况下的参考
我有一个简单的例子:
public class Order
{
private ArrayList<Product> orders = new ArrayList<Product>();
public void add(Product p)
{
orders.add(p);
}
}
Run Code Online (Sandbox Code Playgroud)
它是聚合还是组合?我想这是构图,因为删除订单后订单会减少,对吗?不幸的是,这是一项任务,答案是不同的; /你知道为什么吗?
第二个问题:
public class Client extends Person
{
String adress = "";
Orders orders = new Orders();
public Client(String n, String sn)
{
name = n;
surName = sn;
}
public String getAddress()
{
return adress;
}
public Orders getOrders()
{
return this.orders;
}
}
Run Code Online (Sandbox Code Playgroud)
它是客户和订单之间的关联吗?我的老师告诉我这是关联,但我想知道为什么它不是聚合/组合 - 他告诉我只有当一个类包含很少的不同类的实例时才会发生聚合或组合 - 是吗?我猜不是,因为例如汽车包含一个轮子和它的聚合我猜?
这是什么类型的关系,为什么?
比方说,有一种通用的方法incx.有两个版本incx.一个专门的类型a,一个专门的类型b.Type b是的子类a.您将获得一个类型的对象b,派生类型 - 但您想要调用专用于类型的方法a.如果还没有一个专门针对类型的同名方法,你可以很容易地做到这一点b,但是,有这样的方法.
那么a在这种情况下如何调用专用于类型的方法呢?
(defclass a () ((x :accessor x :initform 0)))
(defclass b (a) ((y :accessor y :initform 0)))
(defgeneric inc (i))
(defmethod inc ((i a)) (incf (x i)))
(defmethod inc ((i b)) (incf (y i)))
(defvar r (make-instance 'b))
Run Code Online (Sandbox Code Playgroud)
正如CLOS所承诺的,这称为最专业的方法:
* (inc r)
* (describe r)
..
Slots with :INSTANCE allocation:
X = 0
Y = 1
Run Code Online (Sandbox Code Playgroud)
但在这种特殊情况下,(不是一般)我想要的是访问不太专业的版本.说出类似的话: …
我正在阅读一些关于设计模式的书籍,虽然有些人将抽象和实现之间的关系描述为一个组合,但有些人将其描述为聚合.现在我想知道:这取决于实施吗?关于语言?还是上下文?
我正在为其他人的代码创建 UML 图,我遇到了一些奇怪的事情 - 一个子类有一个父类作为它的成员变量之一,似乎既有“有一个”关系,也有“是一个”关系。显然,这是故意的,但即使浏览了 UML 指南,我仍然不知道如何表示这一点。我是否只显示继承,更强的关系?我是否覆盖箭头,创建一个带有一条线的实心白色箭头?
在 Java 中替换了类名:
public abstract class A {
}
public abstract class B extends A {
protected A a;
}
Run Code Online (Sandbox Code Playgroud)
我将如何代表这一点?
关于我将在我的类图中使用哪些关系,我有些疑惑.我知道我可以使用一般关联(使用关联线)或更具体的关联,如聚合或组合.我已经知道聚合和组合的定义,但我的问题是:
java ×4
uml ×4
inheritance ×2
oop ×2
aggregation ×1
associations ×1
bridge ×1
c# ×1
clos ×1
common-lisp ×1
composition ×1
diagramming ×1
methods ×1
ooad ×1
reusability ×1
spring ×1