I am pleased to announce a project we have been working on called “PreciousMetal”. PreciousMetal is actually a group of projects that can be mix or matched to aid in project development. A brief description of each project follows:
Gold.Hammer is a library of useful patterns we have developed from 5+ years of reading blogs and books with very big words, slowly accumulating all the “best practices” of software development. The vision for this project is to to enable using exactly the same design and code for every requirement. To accomplish this, the build runner included with Gold.Hammer contains a sophisticated interpreter component that is capable of evaluating your code’s intent and weaving the appropriate IL to adapt to the code’s context. If that is confusing, some code might help:
Scenario: Multiple algorithms are needed (okay, actually only two) and new ones are potentially going to be required (well probably not, but its good to be pro-active)
using(var strategyPattern = Gold.Hammer(pattern=>pattern.Strategy))
.Algorithm(name=>name.Is("default").Executes((args1,args2,args3)=>args1 + args2))
.Algorithm(name=>name.Is("alternate").Executes((args1,args2,args3)=>args2 * args3));
var obj = new Toy(strategyPattern);
That’s it! Sweet, huh?
Silver.Bullet provides cross-cutting infrastructural concerns such as persistence, messaging, etc. Now, you may have read some blogs or articles which condescend upon the positive attitude a rookie gets when exposed to a tool that can improve their craft and ability to deliver product. They often make some snarky comment like “but remember, there is no ‘silver bullet’…” then go on to deflate the enthusiasm you have in learning a new tool.
NO MORE! Now you have both a project that is a silver bullet AND lives up to this lofty goal. Silver.Bullet combines the best of both drag-n-drop-developer and gold-plated-code-developer. Inside the project is a visual designer to not only mock up UI’s and generate the domain you will need while producing the mappings for writing to a database, but it does all this writing the CODE WITH A FLUENT INTERFACE and with a full suite of associated tests giving you 107% code-coverage !
We are currently working on two new features that should make this project a game-changer at any company:
- Supports for serialized events being written to a NoSQL database – simply select ‘CQRS > DDD > EventSourcing’ from the drop-down list and you have everything you need to tear your domain away from your reporting concerns.
- Wrapping all tests with “When”,”Given”,”Then” to give you behavioral goose pimples and longer
If you are stuck on a project wondering how to eliminate some bugs or boredom because your xml or T-SQL skills aren’t as good as your nun chuck skills, or if your team is still stuck in the dark ages of writing code in the name of “craftsmanship”, Silver.Bullet could very well be your, ahem, Silver Bullet!
Aluminum.RecycleBin is a “commons” library guaranteed to be useful on every project you ever work on. We all know you shouldn’t throw anything away without first hoping you can recycle it to save the earth, so why would you treat your code any differently?
This isn’t like those other “commons” libraries that, at first, seem like a big help but soon are just short of what you really need to become a maintenance headache. To avoid this kind of experience with other commons libraries, we implement each and every API call with the same clever signature using the new .NET 4.0 optional parameters along with an array of Action<T> to promote reuse. Clever, huh? A snippet from the RecycleBin’s DateTime API should show its power:
var listOfDays = RecycleBin.DateTime.From(DateTime.Now,until=>until.AddDays(10),until=>until.AddDays(30));
Which of course returns an array of arrays of DateTime, listed from today until the specified outer bounds. This is just a basic example to demonstrate how powerful and useful this library is.
These are just a few of the projects we are working on and all are currently licensed under the CSPL. If you are interested in contributing or just checking it out, the project is being hosted here.Have fun!
04-01-2010 2:48 PM