Dovremmo aggiungere una classe extra a questo esempio di codice

2

Ho un sito di acquisti che consente agli utenti di effettuare ordini. Nella mia applicazione web quando gli utenti fanno clic su "Crea ordine", chiamo una classe OrderService che assomiglia al seguente:

public class OrderService
{
    public void CreateOrder(OrderDTO dto)
    {
        SaveOrder saveOrder = new SaveOrder();
        ReduceStock reduceStock = new ReduceStock();
        CustomerOrderEmail customerOrderEmail = new CustomerOrderEmail();

        saveOrder.SaveToDatabase(dto);
        reduceStock.ReduceStockInDatabase(dto);
        customerOrderEmail.SendEmail(dto);
    }

    public void ApproveOrder(OrderDTO dto)
    {

    }

    public void DispatchOrder(OrderDTO dto)
    {

    }
}

Il metodo Crea ordine esegue 3 operazioni che ho suddiviso in classi.

  • Salva ordine nel database
  • Riduci il magazzino nel database
  • Email conferma cliente

Stiamo avendo una discussione interna sull'opportunità o meno di avere un'altra classe chiamata qualcosa come CreateOrderProcess che ha 1 metodo pubblico, questo metodo chiamerebbe quindi i 3 metodi precedenti. Vedi sotto:

public class OrderService
{
    public void CreateOrder(OrderDTO dto)
    {
        CreateOrderProcess createOrderProcess = new CreateOrderProcess();

        createOrderProcess.Process(dto);
    }

    public void ApproveOrder(OrderDTO dto)
    {

    }

    public void DispatchOrder(OrderDTO dto)
    {

    }
}

public class CreateOrderProcess
{
    public void Process(OrderDTO dto)
    {
        SaveOrder saveOrder = new SaveOrder();
        ReduceStock reduceStock = new ReduceStock();
        CustomerOrderEmail customerOrderEmail = new CustomerOrderEmail();

        saveOrder.SaveToDatabase(dto);
        reduceStock.ReduceStockInDatabase(dto);
        customerOrderEmail.SendEmail(dto);
    }
}

Siamo nuovi in questo e stiamo cercando qualche direzione. Qual è la migliore pratica? Dovremmo aggiungere questa classe in più o no?

La seconda domanda è che le nostre classi SaveOrder, ReduceStock e CustomerOrderEmail si trovano in un progetto chiamato BusinessLogic. Abbiamo ragione a definire queste classi come logica aziendale?

Grazie in anticipo

    
posta user1786107 21.03.2016 - 21:13
fonte

2 risposte

1

Non vorrei introdurre nulla.

Questo sembra qualcosa che potresti rompere in pezzi più piccoli se diventasse difficile da gestire. Ma al momento, le chiamate a tre funzioni non sono difficili da gestire, quindi lasciala semplice finché non hai bisogno di per renderlo complicato.

In effetti, eliminerei alcuni di questi livelli a meno che non vengano utilizzati da un servizio diverso. Quindi più simile;

public void CreateOrder(OrderDTO dto)
{
    SaveToDatabase(dto);
    ReduceStockInDatabase(dto);
    SendEmail(dto);
}

private void SaveToDatabase(OrderDTO dto) 
{
    ...

Il lavoro di OrderService è di occuparsi degli ordini. Lascialo e rompilo solo se inizia a fare troppo o inizia a fare cose che non riguardano gli ordini.

Ad esempio, SendEmail(dto) sembra composto e invia un'email relativa a un ordine. OK, la parte che fa logica specifica dell'ordine (come la costruzione di un messaggio che dice "Grazie per il tuo ordine") dovrebbe vivere in OrderService. Se invii email più in generale, potresti volere qualcosa come NotificationService, in modo che tu possa farlo;

 private void SendEmail(OrderDTO order)
 {
     var subject = $"Thanks for ordering a {order.Product.Name}!";
     var body = $"Your {order.Product.Name} is on it's way";
     notificationService.Send(subject, body);
}

Si noti come le prime due righe sono specifiche per l'ordine e la terza riga è un'utilità di sistema generale per l'invio di e-mail. Quindi i primi due appartengono a OrderService e l'altro può essere scomposto.

    
risposta data 15.05.2016 - 10:14
fonte
0

Prima di tutto, fai funzionare tutto. Va bene se hai copiato una funzione e l'hai messa in più punti. Quando tutto funziona, verrà chiamato versione iniziale della tua applicazione (v1 o qualsiasi altra cosa). Il prossimo passo è abbellire. Questo è quando vedi molta ripetizione nel tuo codice. Vedrai quale blocco di codice deve essere classificato.

L'abbellimento del codice consente di abbreviare il codice e la documentazione per la manutenzione futura. Ricorda sempre di non stressarti a creare codice di classe o di codice breve nella versione precedente poiché la classe non aiuta il tuo codice a funzionare. La classe aiuta solo a semplificare la programmazione in futuro, poiché non è necessario copiare e incollare più volte.

    
risposta data 14.05.2016 - 22:04
fonte

Leggi altre domande sui tag