Click here to Skip to main content
15,881,828 members
Home / Discussions / Design and Architecture
   

Design and Architecture

 
AnswerRe: Advice for web application technologies / architecture Pin
DerekT-P10-Dec-20 23:49
professionalDerekT-P10-Dec-20 23:49 
QuestionDesign Pattern advice Pin
Freerk_C16-Nov-20 3:20
Freerk_C16-Nov-20 3:20 
AnswerRe: Design Pattern advice Pin
Pete O'Hanlon16-Nov-20 4:46
mvePete O'Hanlon16-Nov-20 4:46 
GeneralRe: Design Pattern advice Pin
Freerk_C16-Nov-20 22:09
Freerk_C16-Nov-20 22:09 
GeneralRe: Design Pattern advice Pin
Rob Grainger6-Jul-21 11:40
Rob Grainger6-Jul-21 11:40 
AnswerRe: Design Pattern advice Pin
Gerry Schmitz16-Nov-20 7:24
mveGerry Schmitz16-Nov-20 7:24 
QuestionData Class for data combined from Other Classes Pin
cjb11010-Nov-20 21:27
cjb11010-Nov-20 21:27 
AnswerRe: Data Class for data combined from Other Classes Pin
Richard Deeming10-Nov-20 21:50
mveRichard Deeming10-Nov-20 21:50 
DTO stands for "data transfer object", so technically anything you return from your API will be a DTO.

The problem with reusing model classes, particularly if you're using an ORM like Entity Framework, is the navigation properties. For example:
C#
public class Customer
{
    public List<Order> Orders { get; set; }
}

public class Order
{
    public Customer Customer { get; set; }
    public List<OrderLine> Lines { get; set; }
}

public class Product
{
    public List<OrderLines> OrderLines { get; set; }
}

public class OrderLine
{
    public Order Order { get; set; }
    public Product Product { get; set; }
}
If you now want to return the details of a single order, that will include the customer, which will include all of the customer's orders. Unless your serializer can handle it, you already have a circular reference.

But it gets worse: each order line will return the product. And each product will return all of the order lines which use it. And those will include the details of the order they're associated with, which will include all of the lines for that order. And each order will return the details of the customer, which will return all of the orders and order lines for that customer.

Pretty soon, you're returning almost everything from your database just to display the details of a single order!

It's usually better to create specific DTOs to represent just the data you want to return, with no circular dependencies. You can use a tool like AutoMapper[^] to simplify mapping between your model classes and your DTOs.



"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer

AnswerRe: Data Class for data combined from Other Classes Pin
Gerry Schmitz10-Nov-20 21:53
mveGerry Schmitz10-Nov-20 21:53 
AnswerRe: Data Class for data combined from Other Classes Pin
Mycroft Holmes11-Nov-20 11:07
professionalMycroft Holmes11-Nov-20 11:07 
GeneralRe: Data Class for data combined from Other Classes Pin
cjb11011-Nov-20 19:20
cjb11011-Nov-20 19:20 
Questionn-Tier Design Question Pin
Kevin Marois2-Nov-20 7:10
professionalKevin Marois2-Nov-20 7:10 
AnswerRe: n-Tier Design Question Pin
Richard Deeming2-Nov-20 22:16
mveRichard Deeming2-Nov-20 22:16 
GeneralRe: n-Tier Design Question Pin
Kevin Marois3-Nov-20 6:16
professionalKevin Marois3-Nov-20 6:16 
AnswerRe: n-Tier Design Question Pin
TimWallace23-Feb-21 22:54
TimWallace23-Feb-21 22:54 
RantWhen will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Member 1124694812-Oct-20 5:15
Member 1124694812-Oct-20 5:15 
AnswerRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Richard MacCutchan12-Oct-20 5:23
mveRichard MacCutchan12-Oct-20 5:23 
AnswerRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Dave Kreskowiak12-Oct-20 8:27
mveDave Kreskowiak12-Oct-20 8:27 
GeneralRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Greg Utas12-Oct-20 10:00
professionalGreg Utas12-Oct-20 10:00 
GeneralRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Gerry Schmitz12-Oct-20 10:57
mveGerry Schmitz12-Oct-20 10:57 
GeneralRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Richard MacCutchan12-Oct-20 20:56
mveRichard MacCutchan12-Oct-20 20:56 
GeneralRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Gerry Schmitz12-Oct-20 22:20
mveGerry Schmitz12-Oct-20 22:20 
GeneralRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Richard MacCutchan12-Oct-20 22:27
mveRichard MacCutchan12-Oct-20 22:27 
GeneralRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Gerry Schmitz12-Oct-20 22:57
mveGerry Schmitz12-Oct-20 22:57 
GeneralRe: When will developers stop using dynamic/asynchronous loading of pages/links/button Pin
Richard MacCutchan13-Oct-20 2:45
mveRichard MacCutchan13-Oct-20 2:45 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.