Che tipo di accoppiamento dei parametri è il meno oneroso per il chiamante quando i dati devono essere mappati?

0

Sto creando una libreria matematica che gestirà i punti come input di funzione (come mostrato di seguito).

public struct Point { public int X; public int Y; }

public static class MyLib
{
    public static float CalculateSomething(Point point1, Point point2) 
    { ... }
    ...
}

Il mio piano è di essere in grado di usarlo insieme a varie librerie grafiche / di gioco e come tale che richiederà la trasformazione da qualunque tipo di Point sia dalla libreria grafica a quella fornita dalla mia libreria prima che possa essere utilizzata.

L'utilizzo di una struttura Point (o classe nella versione Java) come Oggetto parametro , che sarebbe accoppiamento parametro oggetto è un modo pulito e piacevole per semplificare sapere cosa passare ma richiede anche di mapparlo alla mia struttura / oggetto Point prima di ogni chiamata di funzione:

var mappedPoint1 = new Point(point1.x, point1.y);
var mappedPoint2 = new Point(point2.x, point2.y);
var result = MyLib.CalculateSomething(mappedPoint1, mappedPoint2);

Un'alternativa potrebbe essere l'utilizzo di un accoppiamento di parametri di dati semplici in cui solo i tipi primitivi vengono passati come parametri:

var result = MyLib.CalculateSomething(point1.x, point1.y, point2.x, point2.y);

Posso anche vedere pro / contro per questo approccio poiché non richiede il mapping a un oggetto dati ma ha problemi se compromettono l'ordine dei tipi primitivi passati. O se sono necessari più parametri, comincerebbe a diventare una grande lista di parametri.

Che tipo di accoppiamento qui sarà il meno oneroso sul codice di chiamata? Mentre i parametri primitivi sono i più semplici da interfacciare con il punto, l'astrazione porta chiarezza e contesto, ma richiede anche più lavoro e codice di mappatura.

    
posta morbidhawk 11.06.2017 - 22:08
fonte

1 risposta

1

I motori di gioco e le librerie con cui ho lavorato solitamente forniscono sia il parametro dell'oggetto che l'accoppiamento semplice dei parametri di dati tramite metodi sovraccaricati.

Utilizzerai Point internamente ai tuoi algoritmi, o il primo passo sarà sempre quello di scomporre Point in dati semplici? La maggior parte delle definizioni di geometria nei motori di gioco hanno operazioni utili su di loro come distance che tu stesso potresti voler usare nelle tue funzioni. Se si intende utilizzare gli oggetti internamente alla propria funzione, definire definitivamente i parametri dell'oggetto e definire semplici sovraccarichi dei parametri di dati, altrimenti non preoccuparsi nemmeno dei parametri dell'oggetto. La semplicità è spesso migliore.

Se si dispone di una manciata di motori di gioco che si desidera targetizzare in modo specifico, una terza opzione consiste nel definire i binding specifici delle librerie delle proprie funzioni che utilizzano gli oggetti delle librerie come parametri. Per esempio. Posso passare un Vector2 da LibGDX importando i binding LibGDX della tua libreria. Questo sembra però troppo lavoro.

Il codice correttamente documentato sarà il modo migliore per aiutare un utente con la tua biblioteca.

    
risposta data 12.06.2017 - 00:08
fonte