June 2003 - Posts
Mads brings up the subject of organizing your project. Should you go for a physical schema equal to the way your namespaces are organized? Answer:
It doesn’t matter a single bit.
The fact is that reflection is the way to go from a programmers perspective. The object browser/class browser should be used as your project overview and not your physical files. I know its tempting to start browsing through .cs files but it gets quit messy along to road let alone the fact that your application framework translates itself way better through classes, namespaces other then directories or files. You need to in order to master the application framework to its fullest extend.
Sit down with your team, decide what strategy to use and stick to it. That’s the real issue here. Note the decision is affected by the checkout strategy you use in source control tools (Solution, project or file based? Are files shared across projects or solutions even?).
I got this function bugging me, can anyone here explain me what a Software Specialist does during his regular day job? Google.com didn’t give me the proper answer. Thanks for sharing!
Frans just posted “the link”, read more here. What Frans doesn’t know is that I’ve already read the book and been busy reviewing Ed’s drafts for his second edition ;) For those seeking for more on Ed go here and here.
I move in mysterious ways ;)
You gotta see this "Smart Testing" (dutch). Our product manager is driving this "thing", he claims cars like these seem to break the ice when selling my goods.
What is wrong with the current generation of software engineers? Does “solve your business problem” ring a bell? Why are we all concentrating on managing recourses, filling our containers and passing those across our tiers or even across appdomains. Is our world about when to or not to use Readers, DataSets, Custom Classes? Nah it’s all about that little Service Layer on top where the business problems are solved and our “almost likable” user interface. Read this:
Application Architecture for .NET: Designing Applications and Services
Domain-Driven Design, the Book
and start practice some eXtreme Programming/Planning in order to not get overwhelmed by the complexity efficient, flexible, reusable domain driven enterprise applications bring. And please stop thinking “Database Centric”. Let us all shift to “Domain Problem Centric”.
Andres has an ongoing discussion taking place right here. I think we should not hide this discussion in comments, but throw the ball up in the blog-air, who's catching?
Did anyone here worked on an application with a shitload of associations between entities? Ever thought about loosely coupling? Ever done some serious maintenance on .NET applications build upon DataSets or Typed DataSets even or tried to extend an application? My personal experience is that applications build with ADO.NET objects as carriers for entity data are a hell to maintain or to extends. You as a programmer should always be aware of the “relational structure” of your app. Basically you’re just adding some bits and peaces of logic on top of your data model. I personally prefer solving business problems in a somewhat more intuitive way.
Exactly this is the point of no return, the brick bashing Fowlers window… the breakpoint for you to drop Microsoft pr-garbage and drop this nasty methodology. Scalable, reliable, extendable applications are mend to solve business problems by transforming the complex problem is an easy to understand and use model. This model certainly doesn’t have to be a 1:1 image of the business or one size fits all solution, but should be able to get the job done! What the hell are we doing here? We are discussing technical solutions not by acknowledging the tradeoffs in favor of solving our business problem, but comparing .NET technology. I feel like we as a community are lacking from this point on.
To sum it up, it all depends on “what to solve”. I’ve noticed a solid OO-model gives me a hell of a lot information to solve my business problems in contrast to ADO.NET objects where I get the sense that I’m still bashing Recordsets like structures (in fact I am) and constantly working with a print-out of my the data model on my desk. Little changes in an OO-model simply mean adding attributes, hooking extra associations (this is not as simple as it seems) and modifying my mapper (home made framework ;)). In contrast, ADO.NET objects force me to “yet again” make a new print-out of my data model and discuss the “what would and what could happen” if we change here, here and here with my team. Does this break our application?
To bad 95% of the managers making the vital decisions read Microsoft’s pr and instruct me to use ADO.NET objects no matter what, across tiers to solve uttermost complex business problems, which provides me with a lot of work and maintaining crappy applications ;) Make the right decisions, but be aware of changing requirements! I prefer OO anytime because that way I can earn my boss money (reading this? Yes I like you to make cash, $) by participating evolving requirements fast, effectively and deliver quality software that fits our customers needs. Why? Because I’m a self trained software engineering and not to shy to make mistakes and refactor any day any time.
As stated in the title... my plan.
Although it is hard for me to admit (but it needs to be done, I am on my way to become a pragmatic programmer), as a follow up on Frans… I have made a serious design flaw in my home-made or-mapping framework.
I am implementing Single Table Inheritance (Represents an inheritance hierarchy of classes as a single table that has columns for all fields of the various objects), which forces me to call base.Load within the concrete class’s Load function. I am passing the to_load object as a param into the function and expecting it as return value being fully loaded. This forces me to downcast the object and use setters.
I DO NOT want to use setters (at least not for the OID, not at all actually because the object is a read only except for the lazy loaded associations)… the creator of the object is the “one and only” qualified to set properties.
public virtual AbstractDomainEntity DoLazyLoad(AbstractDomainEntity obj, DataRow dr)
((Batch)obj).Guid = new Guid(dr["bat_BatchGuid"].ToString());
((Batch)obj).Name = dr["bat_BatchNm"].ToString();
((Batch)obj).Weight = 0;
((Batch)obj).Locations = null;
public override AbstractDomainEntity DoLazyLoad(AbstractDomainEntity obj, DataRow dr)
((DispatchBatch)obj).ProducedBy = batchProcMpr.Find(obj);
As can be seen I’m hooking associations, laziness and some bogus stuff. I could do some hacking by creating a dummy object and hassle with the references, but that would be nasty.
I am glad that I spent a fair amount of work on the public interfaces so this crap is hidden quit well from my users, but I certainly need to revisit my thoughts tomorrow (tuesday vs. monday story).
Roy notes Scoble writes about his escapades with his wife. Well boys and girls I can assure you this is a FREAKING TWO WAY STREET! My life is my work and my work is my life and I am not throwing my creativity out the window because of other people disrespecting those things that seem to drive me. I started coding at the age of 21 (and look where I am now). Before that I have done ton’s of other stuff. Been there, done it. I certainly do not consider myself to be a social geek, I am really not even, just because my girlfriend assures me that I am not every once in a while. I am although different… I am different in a sense of adopting to new things with the speed of lightning. I am different in a sense that my interest are exceptionally broad. Different in a sense that I don’t mind not seeing my friends for a few weeks because of deadlines or working 14h a straight without a break in order to keep focus. I am a one of a kind person and proud to be so. My girlfriend ack’s that and provides me the space to express myself (we have been together for more then 6 years now). My personal office is in the middle of the living room, so when I code people surrounding me are watching tv, reading or talking. This prevents me from being socially disconnected from the other world. Yes I consider myself to be getting the best from both worlds and I advise you to do so as well. Although my girlfriend doesn’t care about the stuff I do, she cares in a way because I care, just like I care she is getting so much out of buying new clothing, participating in the board at the local tennis club, enjoying her job at the local bank. It is a TWO WAY STREET so reorganize your life to get the best out of it.
I am off, watching my girlfriend playing and hopefully winning the finale woman double in Hapert, The Netherlands… after that I’ll be barbecuing with my family and somewhere in between brainstorming about my upcoming tech presentation in favor of my graduation project, revising my apps domain model to get those nasty bidirectional associations out, reading eXtreme Programming from Kent and reading the next chapter of Pragmatic Programmer, reading the foreword of eXtreme Planning, thinking over if I can spend a few hours fishing with my friends next weekend.
Ps: On our vacation to Tenerife, Canary Islands I have been communicating daily with my team at Hostile Intent (hobby project) to make our next milestone… this should give you a general clue how nuts I can be once I am motivated. I could have been lying on the beech burning my ball’s.
Life can be great once you get the hang of it.
I just noticed a very interesting ORM project over at SourceForge. I hate using CVS mingled with Microsoft tools so I didn’t give the newly check’ins in good look, but the provided build ojb-net-0.0.0109.0637 surely looks promising. For some reason developers on SourceForge “just code” and don’t bother with design up front (at least not in public). Some UML would come in handy. The OBJ.Net persistent object API. Be sure to check out the transaction namespace as well!
I just wished Microsoft finally quit promoting Table Module pattern based solutions and start participating towards rich OOP middle tiers. This is what I found in the newsgroups concerning ObjectSpaces:
We are still working hard on this project, once we know its ready to ship,
we definitely will inform the newsgroup first.
Thanks for the patience.
Guang-an Wu, sorry to say but I am afraid, very afraid even that companies will choose other technologies over .NET because the lack of initiative from Microsoft in making the transition from the relational- to the object oriented paradigm. There still are companies who choose exclusively for Microsoft products because of the risk third party frameworks and tools bring.
Jimmy noticed Microsoft seems to be breaking "new grounds", but I’m not convinced.
More Posts Next page »