David
David

Reputation: 37

How should I make a Class Diagram in MVC?

Here's my classdiagram:

enter image description here

In my perspective (since each cannot function without the next one):

I think I'm wrong in my understanding of UML relationships.

What is the right way to make a class diagram in MVC?

Upvotes: 2

Views: 5311

Answers (1)

Christophe
Christophe

Reputation: 73490

Terminology and semantics

If classes cannot function without another one, there is a dependency. A dependency does absolutely not imply composition.

In object oriented programming, we often refer to composition, in the sense object composition. This relationship is stronger than a simple dependency. It means that each object of the class may need to knwow objects of the other class. In UML we represent this with an UML association.

In some case, the links between objects are stronger, and may have UML aggregation or UML composition semantics. But it's not because you compose objects, that there is an UML composition. Same term, different meaning (some more advice on using UML association and composition and avoiding UML aggregation: here).

In MVC, the Controller is associated with the Views and the Model, and each Views is associated with the Model as well. There is no UML composition.

Notation

You cannot compose a class with a package. Packages describe namespaces and can be nested. They can contain other UML elements. But they cannot be associated/aggregated/composed with classes.

What you are looking for seems to be a component diagram: components can be nested, and be relate to other components via interfaces. And a component can contain classes.

Content of your diagram

There seem to be a slight confusion between the DDD domain model and the MVC model. Despite the same term, the two concepts are different.

In MVC, the Model manages the knowledge, meaning the domain model and everything needed to cope with the domain model:

  • User, Transfer and Tax are DDD domain entities/aggregates and belong to the MVC model
  • Everything needed to persist this knowledge, such as UserRepository, TransferRepository, TaxRepository also belongs to the MVC model. If you'd use another persistance approache (e.g. table gateways, or active objects) you would not have repositories but other objects.

The MVC Controller processes the user input, and sends commands to views and the model. It is not a repetition of the domain objects.

Where are the views ? What is the purpose of your services ?

  • are they domain service, i.e. operation that involve several aggregates and do not naturally belong to any single one of them ?
  • are they a service layer of an application, meant to link it with the outside world?

Upvotes: 3

Related Questions