Perché il codice include una chiamata a un database o a un DAL non definito come client?

3

Entrambe le classi sottostanti implementano la stessa interfaccia e sono infatti destinate a essere intercambiabili l'una per l'altra. Perché il secondo non è indicato come "cliente" nella letteratura?

Ci sono molti riferimenti a livelli di servizio, repository, ecc.:

Quanto è essenziale creare un livello di servizio ?

link

link

Questo è un client WebAPI. Vediamo lo stesso modello con il client WCF, ecc.

namespace Application.WebAPIClient
{
    public class UsersClient : BaseClient, IUsersService
    {
        public async Task<int> SaveUser(User user)
        {
            string json = JsonConvert.SerializeObject(user);
            StringContent content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
            HttpResponseMessage msg = await httpClient.PostAsync("users/saveuser", content);
            return Convert.ToInt32(await msg.Content.ReadAsStringAsync());
        }
    }
}

Perché il seguente non è un "client LAN" o qualche altro tipo di client? Spesso chiamato Repository o Service ma mai client anche se racchiude una chiamata a sqlClient proprio come il codice sopra include una chiamata a HttpClient.

namespace Application.Repository
{
    public class UsersRepository : BaseService, IUsersService
    {
        // ...

        public async Task<int> SaveUser(User user)
        {
            db.Users.Add(user);
            await db.SaveChangesAsync();
            return user.ID;
        }
    }
}
    
posta Sam 06.01.2017 - 17:00
fonte

4 risposte

7

Tecnicamente è un client. Qualsiasi classe, metodo o interfaccia che faccia uso di un'altra classe, metodo o interfaccia è un client.

Tuttavia, trattandosi della lingua inglese, tendiamo a usare termini come questo solo dove sono più utili. Quindi, la parola "client" nel contesto dei sistemi di elaborazione dati più comunemente usati per significare l'utente finale e il software che utilizza.

Immagina di usare le parole "client" e "server" per ogni classe o metodo che hai mai scritto, e vedrai rapidamente quanto ridicola questa idea diventa.

    
risposta data 06.01.2017 - 17:07
fonte
3

Perché le cose sono nominate in base alle loro apparizioni esterne, non dalle loro viscide parti interne.

Il resto della tua applicazione ha bisogno di un repository . Non importa se quel repository è o usa un client per fare il suo lavoro. Deve solo agire come un repository.

    
risposta data 06.01.2017 - 17:36
fonte
1

Il primo esempio è il codice interessato alla comunicazione di rete. Serializzazione, de-serializzazione, codifica e URL sono allo scopo di comunicare attraverso la rete.

Nel secondo esempio, nessuno del codice è interessato alla comunicazione di rete. È preoccupato per i dati persistenti. Potrebbe utilizzare alcune comunicazioni di rete sotto il cofano, ma non è esposto.

Tecnicamente qualsiasi codice o componente che chiami un altro codice o sistema può essere chiamato un client, ma in genere therm viene utilizzato per un codice o componente in cui il suo scopo primario sta comunicando con un altro sistema.

    
risposta data 06.01.2017 - 17:52
fonte
1

Il cliente è un concetto fisico. Il livello è un concetto logico.

Un DAL non è un client del database. In realtà non parla affatto con il database. In genere è integrato con un client ODBC o con un'altra tecnologia di accesso ai dati situata sulla stessa macchina fisica. Si noti che la libreria di accesso ai dati è in realtà chiamata client ( esempio ); questo è appropriato perché comunica con qualcosa che è fisicamente separato e su un server diverso.

    
risposta data 07.01.2017 - 00:41
fonte

Leggi altre domande sui tag