Tuesday, July 11, 2006
Pair programming is a well known eXtreme Programming practice. Nowadays it is very frequent that developers aren't in the same physical place so it would be interesting that the IDEs could offer us remote functionality to develop with a person that could be in another part of the world. If you think that it would be useful, let’s try to define some of the potential add-ins to the IDE:
- To have a way to edit remote code and that the changes would be saved in the remote machine. This may be something like VNC client.
- To have a way to communicate with other developers without exiting the IDE. Something like a chat embedded in the IDE including text, audio and video.
Beyond the practice, this could help to assist junior developers in the typical problems that they usually have, yet we were in the same office (this let us not to get up of our chairs).
Tuesday, July 04, 2006
The starting point is to use the existing material:
Then, I think it would be useful to meet with an “OB.chm” (or equivalent) that offers an introduction, explains the design principles to understand how to extend it, shows some scenarios where it can be used and includes the existing material and examples of the typical use cases.
- Terminology (LEL style - Language Extended Lexicon)
- Design of
- Design Patterns used by
- Strategy (GoF)
- Chain of Responsibility (GoF)
- IoC or Dependency Injection
- With strategies
- With policies
- Comparison with to Spring’s BeanFactory
- Reference to how CAB and EntLib uses
As soon as I have a “cleaner” version, I will try to upload the doc to some site or keep on posting.
Monday, July 03, 2006
Let's talk about a cool tool named ObjectBuilder that is a subsystem used by CAB and EntLib to perform the repetitive job at the moment of creating objects.
ObjectBuilder (OB) is a Pattern & Practices Application Block. The owners of the project define it as “a framework for composing object-oriented systems”.
- Create the appropriate objects based on configuration data.
- Manage Singleton pattern.
- Populate public properties and execute methods on the object.
- Communicate with objects that support the IBuilderAware interface.
- Provide a tear down facility that can remove settings from objects by reversing the chain of operations.
1. Builder builder = new Builder(); 3. builder.Policies.Set<ISingletonPolicy>(new SingletonPolicy(true), typeof(Foo), "foo"); 4. Foo obj1 = builder.BuildUp<Foo>(locator, "foo", null); 6. Assert.AreSame(obj1, obj2);
2. Locator locator = CreateLocator();
5. Foo obj2 = builder.BuildUp<Foo>(locator, "foo", null);
3. builder.Policies.Set<ISingletonPolicy>(new SingletonPolicy(true), typeof(Foo), "foo");
4. Foo obj1 = builder.BuildUp<Foo>(locator, "foo", null);
6. Assert.AreSame(obj1, obj2);
When BuildUp method is fired, OB lunches a chain of responsibility (yes, another GoF design pattern), using all Strategies that internallyhas, in order that for each strategy uses to decide whether it must execute using the configured policy.
OB has a lot of more power but it is not well documented yet. By now, you can find some bits in CAB's documentation and in meaningful blogs as kzu and brian button