2010-04-12 5 views
6

Unser Architekt hat über die Verwendung von SOA-Techniken in unserer gesamten Codebasis gesprochen, sogar auf Schnittstellen, die nicht tatsächlich als Service gehostet werden. Eine seiner Forderungen ist, dass wir unsere Schnittstellenmethoden so gestalten, dass wir keine Annahmen über die tatsächliche Implementierung machen. Wenn wir also eine Methode haben, die ein Objekt aufnimmt und eine Eigenschaft für dieses Objekt aktualisieren muss, müssen wir das Objekt explizit von der Methode zurückgeben. Andernfalls würden wir uns darauf verlassen, dass Something ein Referenztyp ist und C# uns erlaubt, Eigenschaften für einen Referenztyp standardmäßig zu aktualisieren.Verwendung von SOA-Prinzipien über OOD in Nicht-Service-Code

So:

public void SaveSomething(Something something) 
{ 
    //save to database 

    something.SomethingID = 42; 
} 

wird:

public Something SaveSomething(Something something) 
{ 
    //save to database 

    return new Something 
    { 
    //all properties here including new primary key from db 
    }; 
} 

Ich kann nicht wirklich meinen Kopf um die Vorteile dieses Ansatzes und wunderte mich, wenn jemand helfen könnte?

Ist dies ein allgemeiner Ansatz?

Antwort

1

Ich denke, Ihr Architekt versucht, Ihren Code weniger Nebenwirkungen zu haben. In Ihrem konkreten Beispiel gibt es keinen Vorteil. In vielen Fällen hat Ihr Architekt recht, und Sie können große Teile Ihrer Anwendung ohne Nebeneffekte entwerfen, aber das kann nicht passieren, wenn Sie mit einer Datenbank arbeiten.

Sie müssen sich mit der funktionalen Programmierung vertraut machen und sich mit Ihrem Architekten auf solche Fälle vorbereiten. Denken Sie daran, seine Absichten sind am ehesten gut, aber bestimmte Fälle sind Ihre Domäne. In diesem Fall ist der Nebeneffekt der Punkt, und Sie würden höchstwahrscheinlich einen Rückgabetyp von bool wünschen, um Erfolg anzuzeigen, aber das Zurückgeben eines neuen Typs ergibt keinen Sinn.

Zeigen Sie Ihrem Architekten, dass Sie die Einschränkung von Nebenwirkungen verstehen, aber bestimmte Nebenwirkungen müssen erlaubt sein (Datenbank, UI, Netzwerkzugang usw.), und Sie werden wahrscheinlich feststellen, dass er oder sie mit Ihnen übereinstimmt. Finden Sie einen Weg, um die gewünschten Nebenwirkungen zu isolieren und sie für ihn oder sie klar zu machen, und es wird Ihrem Fall helfen. Ihr Architekt wird es wahrscheinlich zu schätzen wissen, wenn Sie dies im Geiste der Zusammenarbeit tun (nicht versuchen, Löcher in seinen Plan zu schießen).

Ein paar Ressourcen für FP:

  1. A great tutorial on Functional Programming
  2. Wikipedia's entry on Functional programming

Viel Glück, ich hoffe, das hilft.

Verwandte Themen