Sitter och meckar lite med en Genetic Algorithm komponent . Roggan, dna strängen består av gener , och beroende på vad för problem man vill lösa med GA motorn så kan man skapa nya genklasser. Det beror lite på hur du har tänkt att det ska fungera, men det låter som att du skulle kunna använda dig av Strategy pattern och The Open-Closed Principle (OCP) Roger, nja , rad o rad i exempel 2 , det tar väl inte världens längsta tid att skriva en klass som implementerar ett interface ... men lägger man komponenten på en designer och klickar i eventsen där så går det betydligt snabbare och man får ingen extra klass för det så det var det jag syftade på.. provider interface eller events?
komponenten behöver kunna requesta nya gener för att mutera sitt dna.
för att lösa det kan man tex:
* skicka in en gentyp till komponenten så komponenten själv kan instansiera objekt av rätt gentyp
* skicka in ett factory/provider objekt som implementerar ett IGenome factory som komponenten kan anropa
* låta komponenten raisa events som requestar färdiga objekt
första alternativet är ju ganska simpelt men går inte att påverka så mycket .
andra alternativet är ju ganska robust , där kan man inte missa att implementera någon av de metoder som ska returnera objekt , alltså man kan fånga designmissar vid compiletime , dock krävs det lite mer kod och det går inte använda komponenten i en rad miljö på samma sätt som det sista exemplet.
det sista exemplet är ju ganska osäkert , man kan missa att hantera ett event och märker det inte förrens i runtime , dock kan man lätt lägga komponenten på tex ett formulär (web/win) och via designern koppla sig på eventen som ska returnera objekt.
(så finns ju dessutom problemet med att events kan vara multicastade så flera kan svara och returnera olika saker samtidigt där det blir den sista lyssnarens svar som gäller)
interface lösningen är ju garanterat den messt robusta , men den tillåter inte RAD på samma sätt.
den sista lösningen är mer rad men inte så robust :P
i en utopisk värld med oändligt med tid och pengar så skulle ju självklart den mest robusta lösningen vara att föredra , men nu ser det ju inte ut så ,
så vad skulle ni föredra?
jag lutar nästan åt eventen även fast det är mycket fulare , men jag tror man skulle uppleva det som att komponenten var snabbare och lättare att använda.
ps.
eller man kanske skulle bygga in picocontainer i den istället för alt 1 ;P ;P
//RogerSv: provider interface eller events?
Ärligt skulle jätte gärna komme med någon idé, men vill du utveckla "komponenten behöver kunna requesta nya gener för att mutera sitt dna." lite mera? Får inget dirket grepp om detta.
Vad är gen? en abstract klass? som är en input till en Mutantor eller nått?
Du skriver 3 lösningar men tycker inte du tar upp problemet som kom fram till de 3 alternativen, skulle villja höra det.
En gen har sitt egna DNA? Eller er det "komponenten" som har ett DNA som skall ändras
beroende på GEN som kommer in? Låter lite som du är ute efter någon slags Strategy Pattern...
Mvh JohanSv: provider interface eller events?
tex ett poppulärt problem att lösa med GA är "traveling salesman" , då kan man tänka sig att vi behöver en "TSMProblemGenome" som innehåller div parametrar för att beskriva vilken väg försäljaren ska färdas.
när dnasträngen muterar så kan den mutera gener, ta bort gener och injecta nya gener ,
och själva problematiken är att så smidigt som möjligt mata dna strängen med en ny gen instans.
så kort o gott , min komponent måste kunna ropa efter en ny instans av ett objekt.
//Roger
(har ett eget litet ga exempel på
http://compona.blogspot.com/2004/09/genetic-algorithm-animation.html
där jag använder GA för att få fram en så bra rörelse som möjligt för en arm som greppar en boll.
absolut inget seriöst , mest för att det var fränt att se på..
)Sv: provider interface eller events?
http://www.dofactory.com/patterns/PatternStrategy.aspx
eller genom att använda Observer pattern med events:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/ImpObserverInNET.asp
Jag ser inte varför inte ditt alternativ 2 tillåter RAD, för det du gör är att skapa nya klasser men tex en eller flerea motoder som du anropar skickar in till din komponent och anropar dess metoder.
Alternativ 3, blir ungefär samma sak, bara att du använder events för att anropa metoder, men du måste fortfarande skapa metoderna, ev så slipper du skapa flera klasser då du kan ha skapa metoder med olika namn, men att skapa en klass tar inte så lång tid.
/Fredrik Normén NSQUARED2
http://fredrik.nsquared2.comSv: provider interface eller events?
Hinner inte grotta ner mig i detta nu - tror både events och interface har sina för- & nackdelar. Men jag råkade glömma GA på igår och efter 12miljoner (!!!) mutationer var den nera på en DNA längd av 45.. sen orkade jag inte mer.. blev en hyfsat bra rörelse åt vänster då :-DSv: provider interface eller events?
//Roger