I'm close to having a nervous breakdown, so please-please help me out.
A bit of background: I'm in Russia, working for a financial company and we're developing an in-house application for our back-office, executives, you name it.
The application contains several major areas, and I personally worked on reporting: the whole infrastructure with visual designers and such. All neat & beautiful. I did my best to make my part sing and dance, and I tried to use good development practices and tools (Spring.NET, NHibernate, a few other niceties).
And now here's the original architecture and process looks like (I'll do my best to express how horrific these two are). We're using LLBLGen Pro, which is not-so-bad tool by itself, but listen.
A usually simple process of adding a single domain class requires you to:
- Create database tables (10 min. for simple ones)
- Launch LLBLGen editor, open up Project file (couple of minutes)
- Force LLBLGen to refresh DB schema (its HUGE, so another 10 minutes)
- Add required tables, regenerate code (10 more minutes or so)
- Rebuild DAL assembly (a couple of minutes, what end up with is 11+ meg
DAL.dll
) - Create a so-called BL interface which effectively duplicates all the properties of a generated DAL entity
- Create an interface for the collection of BL objects
- Implement BL interface. This is horrendous, I'm very sorry guys, but I want you to feel the scale of the disaster. And yes, this is all hand-written code (except for properties, which are generated by ReSharper). And yes, all imaginable logic goes inside the domain object. This all in all takes up to 2 hours.3
- Add a row to the database with the name of the class
Modify a handful of hand-written "converter" classes, which basically map from one
enum
to another:public static EntityType Convert(Interfaces.EntityType entityType) { switch (entityType) { case Interfaces.EntityType.Asset: return EntityType.AssetEntity;
(and this goes on for 700 lines; there are 5 similar files). No compile-time warnings when something's missing, nothing. You get slapped with a runtime exception in case you forgot something.
- Implement collection interface, embedding all query logic inside.
- Add a methods to a Remoting Server interface, which is 5000 lines already an ReSharper is choking heavily.
- Implement the said methods
And now you're ready do the most basic stuff.
Implications are as follows:
- Huge amounts of code which is a nightmare to support
- Woeful architecture (for instance, I cannot create an instance of a domain class on the client-side: I have to go all the way to server asking it to retrieve from the DB an object with
Guid.NewGuid()
as an ID) - It's downright impossible to test anything.
- The whole application works terribly slow.
I've already tried talking to my boss about this situation, but he wouldn't listen. The only thing he responds with is that "So what? I don't care writing that much code. And it works!"
How can I persuade him to think once more? My part of the project seems not to impress him neither with how succinict it is, nor with my speed of development.