Goals and Objectives :

Objectives Service Oriented Architecture(SOA),.NET, J2EE,TDD,XP,RUP,WATERFALL Methodology,Arduino,3D Printer,Cloud Computing,AJAX

Monday, April 16, 2007

Agile Methodology /Domain Driven Design wih Rich Client Application

Recently I tried Agile Methodology/Domain Driven Design for a small project. It simply rocks.
Some highlights


Step 1 Architecture



Step 2 Architecture



1. Non-disposable clean prototype.
It resulted in Non-disposable prototype. Nothing more connects with users like Screen Designs/Working prototype. Previously, I used to create disposable prototype, I was designing Screens backed by dummy database (by using DataControls). At the end, the prototype was so corrupted and had so bad references and bad code, We have to abandon the prototype.
Prototype fired by an Object Oriented Engine is real application (Tracer bullet)

2. Rich Middle Tier
Was able to nail process/Workflow classed early in the stage


3. Technical Feasibility
I was able to evaluate technical feasibility, efforts required and hence financial feasibility quite early in the game.

4. Agile
Having no database is really helping me at this time. Making changes to business objects and factory objects is very quick as compared to making changed to database and propagating it to middle tier. Carry less baggage in early really helps but I am reaching a point where I will need a database very soon.


5. 100 percent utilization of efforts

You may say that set up data for business objects is waste of time. Take a breath. I am using this code for my setup for tests. They will represent the functional tests and they are going to be independent of database and hence faster.

6. Free Set up for Functional Unit Tests


7. Window Forms Rock
Sometime back, Survic posted that he is going to use Windows Forms to develop prototype for Web Applications. It really shocked me. Now I see some weight in that argument. I remember that to get the docking, anchoring and other effects in older visual basic version, I have to write some very mathematics intensive routines. Now it is coming out of box.


8. Design Patterns Applied

1. Factory
2. Proxy
3. Clone

9. Application Validation Block Rocks

It is very easy to use (within one hour, I was able to set it and use it comfortably.
It is extensible enough to coexist with others custom validation manager like CLSA.
It also supports reading validation messages from Resource Files which is very essential for global applications. I highly recommended for small projects. Since it uses custom attributes and reflection, one may be careful about batch validation.


10. NHibernate

Very extensible and complex. It requires a hugh learning curve. I don't recommend it to fellow ex-VB6 developers to try in a time-critical project for first time.

11. Resharper Rocks
Excellent productiviy booster. It is must have tool for C# developers. I am going to buy a personal copy very soon. I used the evaluation copy.


12. Under Investingation
1. Windows Form Databinding
3. Licensing Software
3. Microsoft Map

7 comments:

Anonymous said...

I like the fact that you do not use CSLA as is. Freedom, freedom, free at last!

I also like the fact that you collapse all Factory etc. into one thing.

I also like the fact that you used the entity objects.

Putting the above together, it is just one step away from “using command pattern exclusively”. I am not saying you should do it, because simplicity has its virtue; no mention the unnatural flavor of command pattern. However, it has some benefits: using it together with template pattern, you can centralize security, logging, remoting (this is especially important for non-web), and transaction handling.

Surprisingly, I also like that you do not do database – I did quite a few times, just to get things going, exactly as what you have been doing.

Databinding and validation logic: waiting to see how you will spin them :-)

survic

Anonymous said...

By "one step away from “using command pattern exclusively", I mean, you could simply change (split) the Factories into Commands. I know, it is not natural when you use those commands, so, it is likely that you will add static menthods to wrap them, which are fine. My practice is that I do not do the wrapping systematically. I only do it for "popular" commands. Three times is the charm; or, don't worry, be sloppy -- flavor is not a big deal, I can eat anything, anyway.

Anonymous said...

Also, nice to see you blogging again. Keep going!

Vikas said...

Application Validation Block Rocks.
It is very easy to use (within one hour, I was able to set it and use it comfortably.
Extensible enough to coexist with others custom validation manager like CLSA.
It also supports reading validation messages from Resource Files which is very essential for global applications. I highly recommended for small projects. Since it uses custom attributes and reflection, one may be careful about batch validation.

Vikas said...

NHibernate

Very extensible and complex. It requires a hugh learning curve. I don't recommend it to fellow ex-VB6 developers to try in a time-critical project for first time.

Vikas said...

Resharper Rocks
Excellent productiviy booster. It is must have tool for C# developers. I am going to buy a personal copy very soon. I used the evaluation copy.

Anonymous said...

re-post to here also:

Perhaps your using resharper is part of the source of my decision! I definitely read your blog, around the time I was thinking to make big changes of everything.

As for validation app block VAB, I have to beg to differ ;-)

1. Spring.net also has one, a better one. It is almost that EntLib 3.X has everything that spring has, just not as good.
2. VAB is part of the whole thing, even it is easy; to put the whole EntLib 3.X there, it is not a good thing to do, especially you can use spring.net.
3. As you point out, the batch validation, also, it does not store the info of failed validation, etc. I do not know what they are thinking!

4. Perhaps it is reversed FUD: for anything about enterprise computing from M$, you need to be extremely careful. You can never assume anything. There is always something in the corner that you do not pay attention will bite you -- their thinking is so weird, you almost feel that they intentionally try to screw you up. I know, they are becoming better slowly, still, I do not trust M$. I still remember the pain of EntLib 2X and typed dataset! -- so, this time, I will not use EntLib 3.X. I am very curious to hear other people’s result though – even I anticipate that I will say “told you” -- I honestly hope EntLib 3.X is good enough to use, so that EntLib 3.X is not a totally failure, so that I can use it to promote spring.net, or, as a fallback, actually use it if necessary.

survic