| 

.NET C# Java Javascript Exception

1
Hallo,

Ich habe ein wenig über DCI gelesen. Nun Suche ich ein kleines gut verständliches Beispiel. Soweit ich weiß lässt sich das ganze nur mit Scala umsetzen. Hat jemand von euch ein schönes Beispiel? (vielleicht noch witzig)

Über google habe ich bisher nichts so richtiges gefunden.

Geht DCI auch mit c#? wie auf dieser Seite beschrieben
http://horsdal.blogspot.com/2009/05/dci-in-c.html ? Ist das eine Umsetzung von DCI?
20.02.2011
tire0011 109 1 6
3 Antworten
-1
Ok, die Herausforderung bei Deiner Frage ist wohl
vielleicht noch witzig
Ich mache nun mal besser keinen Versuch auf besonders unterhaltsame Art und Weise zu Antworten ;-)

DCI ist ein Architekturmodell und im Kern geht es um strikte Trennung zwischen Daten, Verhalten und der eigentlichen Interaktion. Im übertragenen Sinn entsprechen die Daten im DCI-Muster z.B. einer Entität. Das Verhalten wird in sep. Kontexten implementiert. Bis hier hin ist das nun erstmal nicht ungewöhnlich. Spannend wird es nun bei der Implementierung der Anwendungsfälle, denn die werden auf Basis von Rollen definiert und genau da ist der Knackpunkt, denn so etwas sieht die klassische objekt-orientierte Programmierung nicht direkt vor.

Mit einem besonderen Sprachkonstrukt namens "Traits" ist es in Scala möglich dieses Konzept elegant umzusetzen, was anderen Sprachen fehlt. Deswegen findest Du auch zu den anderen gängigen Sprachen nicht so umfangreiche bzw. etwas gewöhnungsbedürftige Beispiele.

Du stellst allerdings nun mehrere Fragen in einer:
Mit einem direkten Beispiel in Scala kann ich nicht dienen. Du hast ja bereits einen Link angefügt bei dem es um die Umsetzung des Musters in C# geht. Du kannst es mit C# umsetzen, klar. Es ist halt möglicherweise nur nicht so elegant wie in Scala.
20.02.2011
Torsten Weber 691 1 8
Mmm, down-vote und trotzdem akzeptiert? Irgendwas falsch an meiner Antwort?
Torsten Weber 22.02.2011
0
Also habe ich mir mal selbst ein Bsp geschrieben.

object DCIMain 
{
def main(args: Array[String])
{
// Brain --> Data
// Manager, worker --> context, roles
val managerPeter = new Brain("Peter",25,45) with Manager with Happy with ProjectOwner
val workerJana = new Brain("Jana",18,120) with Worker with Angry with Hacker
val workerJanosch = new Brain("Janosch",45,60) with LazierWorker with Normal with Hacker

// interaction
val workContext = new WorkTogetherInteraction(managerPeter,workerJana)
workContext.Work
val lazyWork = new perfectWorkInteraction(managerPeter,workerJanosch)
lazyWork.Work
}
}

abstract class Brain(Name:String,Age:Int, IQ:Int) extends Person
{
def getName() : String = { Name }
def Introduce() = {println("I am " + Name + " my Age is " + Age + " and my IQ " + IQ)}
}

trait Angry extends Person
{
def Felling() = { println(getName + " I am angry let me or I beating you") }
}

trait Hacker extends Person
{
def work() =
{
println(getName + ": I hack your account")
}
}

trait Happy extends Person
{
def Felling() = {println(getName + ": I am so habby, I want to kiss you")}
}

trait LazierWorker extends Person
{
abstract override def Introduce() =
{
super.Introduce
println(getName + ": I am a worker and wear old trousers and dirty shirt ")
}

def Speak() =
{
println(getName + ": oh there is so much work, at the moment I haven't time")
}
}

trait Normal extends Person
{
def Felling() = {println(getName + ": all okay, I do what you want.")}
}

class perfectWorkInteraction (manager : Person, worker : Person)
{
def Work() =
{
println("\n\n work perfect")
worker.Introduce
manager.work
worker.Felling
worker.Speak
manager.Introduce
worker.work
}
}

class WorkTogetherInteraction(manager : Person, worker : Person)
{
def Work() =
{
println("\n\n work together")
manager.Introduce
worker.Introduce

manager.Speak
manager.work
manager.Felling

worker.work
manager.Felling
worker.Speak
manager.Felling
worker.Felling
}
}

abstract trait Person
{
def getName() : String
def Introduce()
def Speak()
def Felling()
def work()
}

trait ProjectOwner extends Person
{
def work() =
{
println(getName + ": create 20 new accounts for MY new project. Finish it yesterday")
}
}

abstract trait Worker extends Person
{
abstract override def Introduce() =
{
super.Introduce
println(getName + ": I am a worker and wear jeans and shirt ")
}

def Speak() =
{
println(getName + ": let me I have to work")
}
}
23.02.2011
tire0011 109 1 6
0
I know there will be many difficulties and challenges but I am determined to do it. If it does not succeed then it will be a lesson for me as well
http://catmario4.com
20.06.2017

Stelle deine Data-Frage jetzt!