|
First I've heard of that. Should I send some tequila over?
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
From the classic VB project I'm porting...
Dim FirstTime As Boolean
Dim FirstTime2 As Boolean
If FirstTime = False Then
If FirstTime2 = False Then
End If
End If
There's nothing like good clear variable naming.
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
...and that's nothing like good clear variable naming.
Did you string the coder up by his thumbs?
You looking for sympathy?
You'll find it in the dictionary, between sympathomimetic and sympatric
(Page 1788, if it helps)
|
|
|
|
|
I wish I had the option - developed by an external party, I'm glad to say we've moved development in-house.
Actually, in spite of all these horrific examples I keep posting, I'm charged with redeveloping from VB6 to .NET MVVM architecture - I'm lead developer on the project, so have tried (as far as possible) to introduce good practice.
There are still issues - the database we have to access is as bad, if not worse, than the VB code (many tables with no PKs (at least until I add them the first time I have to touch it), triggers doing insane things, and tables with names TCMPCOMMABSOLUTE (which stores insurance policies), but at least we can slowly get things working in a sane manner.
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
Do you have database tables that are called something like "ZZZZZZ_tblYNManualDELETE"? I have no idea what this table held because it's contents are a bunch of gibberish, but I can say that the application never touches it. I think...
Or touches the 35 or so other tables with similar naming "conventions".
|
|
|
|
|
Lucky bastard...
We just finished the porting of an AS400 DB, where table names were T123P3 and column names were C23A1. The one designed it dead years ago and we had to read table-table to figure out what the table for. We got some help from an application we could run against the DB, but took over 8 months to identify all tables and columns...And just for the fun - the DB was as far as it can be to be normalized...
I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)
|
|
|
|
|
Maybe not so lucky. A lot of data is in columns with names that may be worse than cryptic. These names are just downright deceiving, like "LpkEngineeringPeerReviewName". Seems like it would hold the name of someone doing some kind of peer review, right? WRONG! It stores the type of installer a piece of software uses, in plain text, like "Automated MSI w/MST".
Nearly half the fields in the entire database are like this. It took me about 6 months to map every field to what it really contains and write importers for everything I needed.
|
|
|
|
|
Ah, that's something an old colleague called "repurposing" - rather than change a column name, the column is "repurposed" to be used for something entirely different.
What could go wrong?
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
Rob Grainger wrote: What could go wrong?
Let me count the ways...
|
|
|
|
|
Yep, that's dire. We've some godawful excrement here, but not that particular flavour.
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
A database I access where I am has a bunch of DONOTUSEblahblahblah tables. 
|
|
|
|
|
Quote: Did you string the coder up by his thumbs? Only the First Time ...and then again on the First Time 2.
- I would love to change the world, but they won’t give me the source code.
|
|
|
|
|
They should be strung up by their index fingers.
I have a feeling they peck-type 
|
|
|
|
|
I wish there was a second first time for a lot of things in life...
It's an OO world.
public class SanderRossel : Lazy<Person>
{
public void DoWork()
{
throw new NotSupportedException();
}
}
|
|
|
|
|
public static class Extensions
{
public static void SetProperty(this object domainEntity, string propertyName, object value)
{
var t = domainEntity.GetType();
var p = t.GetProperty(propertyName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic);
p.SetValue(domainEntity, value);
}
public static void SetProperty<T, TProp>(this T domainEntity, Expression<Func<T, TProp>> getP, TProp value)
{
var e = (MemberExpression)getP.Body;
SetProperty(domainEntity, e.Member.Name, value);
}
}
This piece of code has a fantastic history that is not obvious...
Why is that you might ask?
Well.. the single architect of our application decided that we were going to use Domain Driven Design (DDD). He also decided that all domain object property will have private setters. This being, as you can imagine, inconvenient, we got large use of this method (which he also wrote) to set private properties whenever needed!
Brilliant! Let's use private property for safety! And let's use this method to ignore private! Genius!
|
|
|
|
|
At least, static properties are still safe.
|
|
|
|
|
Not only that - because you have to refer to the property by name you also break compile time type-checking.
|
|
|
|
|
I guess that's where the second overload comes in:
codeReview.SetProperty(review => review.Status, Status.WhatTheElephant);
It's not fast, pretty, or even remotely sensible, but at least it's strongly typed and the property name is checked by the compiler.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Yeah - Ironically the non type safe overload shouldn't be public 
|
|
|
|
|
I created this second overload 2 days ago!!
|
|
|
|
|
well, you can't use this line of code outside of review.GetType() class... Status is private 
|
|
|
|
|
Dagnabit, I keep hitting upvote, but it only registered once.
That's right up there with the "Singleton<t>" articles that get posted here that require the target class to have a private constructor and then use Reflection to get it.
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
That's just as bad, indeed!!!
|
|
|
|
|
What do you get when you cross a joke with a rhetorical question?
|
|
|
|
|
It remind me when I wrote
static bool Is<T>(this T obj);
with reflection...
Then a friend of mind said : WTF have you written that ? instead of "obj is T".
The worse of it is that I had no idea why I did something so stupid... wanted to blame somebody else, but the source control history pointed at me. 
|
|
|
|