DDD and MVC: Difference between 'Model' and 'Entity'

后端 未结 5 724
夕颜
夕颜 2020-12-12 11:27

I\'m seriously confused about the concept of the \'Model\' in MVC. Most frameworks that exist today put the Model between the Controller and the database, and the Model alm

5条回答
  •  猫巷女王i
    2020-12-12 12:00

    Entity

    Entity means an object that is a single item that the business logic works with, more specifically those which have an identity of some sort.
    Thus, many people refer to ORM-mapped objects as entities.

    Some refer to as "entity" to a class an instance of which represents a single row in a database.

    Some other people prefer to call only those of these classes as "entity" which also contain business rules, validation, and general behaviour, and they call the others as "data transfer objects".

    Model

    A Model is something that is not directly related to the UI (=View) and control flow (=Controller) of an application, but rather about the way how data access and the main data abstraction of the application works.

    Basically, anything can be a model that fits the above.

    MVC

    You can use entities as your models in MVC. They mean two different things, but the same classes can be called both.

    Examples

    • A Customer class is very much an entity (usually), and you also use it as part of data access in your app. It is both an entity and a model in this case.
    • A Repository class may be part of the Model, but it is clearly not an entity.
    • If there is a class that you use in the middle of your business logic layer but don't expose to the rest of the application, it may be an entity, but it is clearly not a Model from the perspective of the MVC app.

    Your example

    As for your code examples, I would prefer the first one.
    A Model is a class that is used as a means of data abstaction of an application, not a class which has a name suffixed with "Model". Many people consider the latter bloatware.

    You can pretty much consider your Repository class as part of your model, even if its name isn't suffixed with "Model".

    I would add to that the fact that it is also easier to work with the first one, and for other people who later may have to understand your code, it is easier to understand.

提交回复
热议问题