Che cosa dovrebbe restituire un metodo di lettura (come in CRUD) per una classe che utilizza un'altra classe con un metodo di lettura?

1

Sto cercando di creare una piattaforma di instant messaging di base. Ho tre tipi immutabili di base e ognuno di essi ha una sottoclasse per trattare con CRUD (per scopi SRP, separando la classe dalla logica del database).

Conversazione:

public class Conversation
{
    public uint Id { get; private set; }
    public List<Participant> Participants { get; private set; }
    public List<Message> Messages { get; private set; }
    /* Some extra properties */        

    public Conversation(uint id, List<Participant> participants, List<Message> messages)
    {
        Id = id;
        Participants = participants;
        Messages = messages;
    }

    public static class CRUD
    {
       static void Create(...)  {}
       static void Read(...)  {}
       static void Update(...)  {}
       static void Delete(...)  {}
    }
}

Messaggio:

public class Message
{
    public uint Id { get; private set; }
    public Conversation Conversation { get; private set; }
    public Participant Sender { get; private set; }
    public DateTime SendingTime { get; private set; }
    public string Content { get; private set; }

    /* Constructor */
    /* CRUD */
}

Partecipante:

public class Participant
{
    public Conversation Conversation { get; private set; }
    public Employee Employee { get; private set; }

    /* Constructor */
    /* CRUD */
}

Ho pensato che Message.CRUD.Read(...) dovrebbe ricevere i messaggi dal database e Participant.CRUD.Read(...) dovrebbe ottenere il partecipante dal database. Ma poi Che cosa dovrebbe Conversation.CRUD.Read(...) leggere e cosa dovrebbe restituire?

Voglio dire, dovrebbe ottenere dal database tutte le informazioni sulla conversazione che non ha una rappresentazione di classe nel codice (cioè non Message e Participant ), e poi, dovrebbe restituire un oggetto non completo di Conversation con qualche null s o dovrebbe fare qualcos'altro? Qual è la migliore pratica qui? C'è qualche?

    
posta Sipo 13.09.2016 - 10:13
fonte

1 risposta

3

Il tuo problema è che la tua classe di conversazione non corrisponde a un record nel database. La classe Messaggio e le classi Partecipanti fanno.

Se vuoi applicare la stessa tecnica CRUD alle conversazioni devi avere una classe ConversationParticipant (caricando l'elenco dei partecipanti dalla sua tabella e le informazioni sul partecipante tramite la classe Participant) e la classe ConversationMessage (caricando in modo simile tramite la classe Message) .

Quindi la classe Conversation potrebbe utilizzare queste due classi per caricare i partecipanti e i messaggi e potrebbe caricare le informazioni principali nella Conversazione stessa.

    
risposta data 13.09.2016 - 11:31
fonte

Leggi altre domande sui tag