Come chiarire che sto violando la separazione delle query da comando

0

La Separazione delle query di comando è un principio utile, sebbene non sia sempre l'ideale. A volte è necessario eseguire un processo, che si tradurrà in dati utili che è necessario restituire. Il mio caso specifico è caricare un file su un server e ottenere l'ID del file (che è assegnato da un altro sistema su cui non ho alcun controllo).

In termini semplici, la funzione è simile a questa:

def upload_file(filepath):
    # Set up filedata with values
    result = upload_to_server(filedata)
    return result['id']

Non sto discutendo se ignorare o meno il CQS, ma mi chiedo come renderlo particolarmente chiaro a un utente. Ad esempio upload_file non rende esplicito il valore di ritorno, ma anche get_upload_file è ambiguo. Una docstring è ovvio per rendere esplicita la funzione per chiunque la legga.

Ma mi chiedevo se ci fossero altri schemi utili che rendano esplicito che una funzione esegue azioni e restituisce un valore. O in alternativa, dovrei concentrarmi solo sul rendere chiaro uno di questi aspetti e non preoccuparti di informare completamente l'utente?

    
posta SuperBiasedMan 17.02.2016 - 14:12
fonte

1 risposta

2

Penso che per Python la migliore pratica disponibile sia quella di notare nella docstring che si tratta di una funzione di effetti collaterali.

def upload_file(filepath):
    """
    Uploads a filepath to a server and also returns the remote server id
    """

Se si trattasse di un linguaggio come scala o haskell, si potrebbe comunicare con la firma del tipo della funzione, ad esempio:

type RemoteServerId = Integer
uploadToServer :: Filepath -> IO RemoteServerId

o

type RemoteServerId = Int
def uploadToServer(path: Filepath): Task[RemoteServerId]

Poiché python non ti offre questa opzione, la docstring è la tua opzione principale.

Una tattica supplementare sarebbe avere una convenzione di denominazione. Forse potresti essere esplicito nominando la funzione upload_to_server_and_return_remote_id(filepath)

    
risposta data 17.02.2016 - 14:19
fonte

Leggi altre domande sui tag