Category: Programming
Twin Cities Code Camp Wrapup
So not long ago I presented at the Fall 2007 Twin Cities Code Camp about NBusiness. It was a great experience and really forced me to crystalize a lot of the thoughts I had been coming up with while working on NBusiness. I tried to put in a half and half dose of theory and code. In the end I had more questions than I could really answer in the hour and a half time span we had available. Which is good! I also had a few really interesting questions that really got me thinking about some necessary capabilities for the next version, namely Entity Models and data hiding.
I’ve uploaded the slide deck from the presentation for anyone who’s interested in seeing it. I realize it’s hard to fully grasp of the meaning of a slide without the corresponding talk but, who knows, maybe you’ll find it interesting anyway. I just got my evaluations and I’ll post the results here.
Quality | Ideas and information | Presenter Abilities | Relevant | Average | Comments |
3 | 3 | 4 | 3 | 3.333333 | |
4 | 4 | 5 | 3 | 4.333333 | very impressed. this guy is great. |
4 | 4 | 4 | 3 | 4 | |
4 | 5 | 5 | 4 | 4.666667 | |
5 | 5 | 5 | 5 | 5 | Nice job Justin… |
5 | 5 | 5 | 5 | 5 | Justin did really well for his first presentation…and he really knows his topic because he was ready with answers to nearly every question that came up. |
4.166667 | 4.333333 | 4.666667 | 3.833333 | 4.25 |
So I’ll take this as pretty positive results. If anyone has a need for a presenter on NBusiness you know how to call! I wonder if I should do another presentation at the next code camp? Depends on how much I get done on the next version I suppose. I’m guessing I’ll be right in the middle of some big changes at that time so maybe I’ll defer to the next code camp.
Speaking of which, there is a conference in Redmond at the end of January I am thinking about attending. The conference is called the 2008 Lang.NET Symposium and is all about the creation of .NET languages, compilers and development tools. I really can’t imagine a more perfect conference for me to attend! I’m still trying to figure out the cost of this but if it’s at all feasible then I will definitely go. I would love to learn some things and get a chance to talk to some other people who are interested in the same things.
Entity Inheritance
Inheritance as it pertains to objects is pretty easy to understand and represent. There are lots of complications and benefits that most developers these days understand well. It is also possible to represent inheritance in a relational model, which is effectively a 1:1 relationship between tables. For example you might have the following table schema:
Person |
Customer |
Employee |
pid |
cid |
eid |
Name |
|
Office |
Ssn |
|
|
In this schema you would have foreign keys going from Customer and Employee to person. It’s a way to normalize your data that is similar to inheritance. This is something that I have wanted to support in NBusiness but it is a little tricky as you might imagine. What principles of class inheritance apply to Entities as well, I’m not entirely sure? In the case of entities it’s mostly about inheriting data and behaviors and you don’t really have encapsulation or polymorphism.
I’ve been thinking a lot about this after someone at last weekend’s code camp asked me a question about whether or not it was possible to have entities only retrieve subsets of data. The answer to that questions is a tentative ‘yes’ but in fact it would require a fair amount of manual work to get your stored procedures to map back to the correct tables. It’s possible but you’d lose a lot of the benefits of code generation.
So after thinking about this a bit I realized that the two problems (entity inheritance and retrieving subsets of data) had something in common, which I’m calling data hiding for now. In both situations you may only want a subset of data and behaviors from the base entity so I’m thinking of adding a “hide” keyword which will allow you to not inherit fields, properties and rules from the base entity.
In fact I’m thinking about the possibility of creating a new type called use case or something like that. A use case would be just like an entity except that it can only inherit fields, it cannot declare them, sort of like a reverse abstract class. Also a use case must always inherit from an entity. I would imagine that you could create sub families below your root entity definitions and here you would create specific use case definitions. Or maybe model would be a better keyword? Actually I rather like that now that I think about it. The sub families would be more like the use case while the models will describe the various components of a use case.
So suppose you have a Customer entity, if a user logs in and is a Customer you have one use case where they are managing a customer data and have a variety of behaviors associated with that. In this use case they may only have a subset of customer data available to them for editing. Now you may also have a different use case where an administrator of the application logs in and needs to be able to edit a different subset (or complete set) of customer data. As it is now if you declared two different Customer entities for the different use cases you would need to then create the tables and stored procedures to allow them to share the data. With entity inheritance and models you would be able to much more effectively express data hiding while maintaining the ability to share data.
I will work out the details a little bit more but for now check out my wiki page on Entity Inheritance with a little more detail and an example. These features are starting to clarify a bit more in my head; you can look forward to a few other cool features soon such as:
· Dynamic SQL Fetching (v2.1)
· CSLA Templates
· VS 2008 compatibility (v3.0)
· LINQ support (?)
· Entity Attributes
· Partial Entities
· Custom authorize / access rules
· Validation rules that apply to only certain CRUD operations
· Validations warnings and info
Also, one last interesting thing is that I fired off an email To Scott Guthrie at Microsoft the other day asking him about the MVC framework they’re working on. He responded by telling me that they’ll be giving me an advanced preview of the framework in a couple of weeks which is really exciting! It really looks like NBusiness could be a natural fit for the MVC framework and I’m pretty excited to check it out. I’m glad to see that they’re having such an open relationship with open source projects.
You must be logged in to post a comment.