|
Extensively, yes. Intensively, no.
- I would love to change the world, but they won’t give me the source code.
|
|
|
|
|
We use them in order to have POCO's and then attach extension methods to them to give them some mojo.
cheers
Chris Maunder
|
|
|
|
|
Why not implement in the object themselves and keep them contained and organized? Is there anything preventing the code to be where it belongs?
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|
|
Separation of concerns, mostly.
cheers
Chris Maunder
|
|
|
|
|
Extensively sounds funny to me. Unless you are creating a framework of extension methods for built-in or third party types, using it intensively may indicate you're doing something wrong with your code.
They have a purpose, be sure you understand it before using it everywhere. It may create unorganized, hard to maintain code.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|
|
Yes, quite a bit. I love the extension method concept. Now if they could just implement "extension properties". Yes, I know you can use extension methods to pseudo-implement properties, but a full-blown extension property implementation would be sweet...
|
|
|
|
|
The core products for the company I work for are mainly COM based libraries. I've written .Net libraries of extension methods that help hide the COM ugliness and provide a more .Net friendly interface.
|
|
|
|
|
I have a .NET Core based Redis Client that I've been working on for a while that heavily uses extension methods. The 'client' just knows how to send a command and receive a response.
All the Redis commands are implemented as extension methods on the 'client'. So as static class for the Key Commands, another for the Hash Commands, ...
in Redis Client
public Task SendAsync(string command, params object[] parameters)
{
return SendAsync(command, (IEnumerable<object>)parameters);
}
public async Task SendAsync(string command, IEnumerable<object> parameters = null)
{
await EnsureConnected().ConfigureAwait(false);
await _commandWriter.WriteRedisCommandAsync(command, parameters).ConfigureAwait(false);
}
in HashCommands
public static Task SendHGetAsync(this RedisClient client, string key, string field)
{
if (string.IsNullOrWhiteSpace(key))
throw new ArgumentNullException(nameof(key));
if (string.IsNullOrWhiteSpace(field))
throw new ArgumentNullException(nameof(field));
return client.SendAsync("HGet", key, field);
}
Each commands are small and trivial. The core client has no tricky dependencies on the commands. Classic Open for Extension but Closed for Modification.
What has been delaying me is the number of tests to test all the commands, plus an update to the latest .NET Core bits.
Another great thing about Extension Methods is the ability to extend 3rd party libraries.
"Time flies like an arrow. Fruit flies like a banana."
|
|
|
|
|
|
What is extensively?
I have a small set of extension methods, but I use them a lot. On sealed classes.
Examples:
DBInt("columnName") - returns int value of column in a datarow, and cleans up DBNull issues.
HiddenCreditCard(CC Number String) - returns CC Number showing only first and last four digits, with asters in between.
|
|
|
|
|
I use extension methods somewhat. I'm slowly building a suite of useful methods. There is also the site extensionmethod.net too.
I keep the extension methods in a core library, but the methods are declared in the namespace of the class I'm targeting. That way, when I reference the core library all the extension methods are available without superfluous using statements.
Be careful, there is an ongoing debate on the internets about whether they're a good thing or bad thing. I would say, use sparingly, and note that an extension method is probably sign-posting a limitation in your design.
As well as other suggestions, I've used them to clean up a messy code base I've inherited. In this code base there were a number of inappropriate methods attached to a static globals class. Side-stepping the whole issue of a statics globals class, the methods attached to it were moved onto extension methods. Not a perfect solution, but migrating to extension methods helped me nudge the legacy code in the right direction.
|
|
|
|
|
|
Now for the trivia question - which episode (or episodes) did the pics come from?
My guess is Amok Time.
Marc
|
|
|
|
|
Pretty sure only the Doc would be decorating a Christmas tree.
|
|
|
|
|
Starting 28 November, I will be working in Stuttgart for the US Army.
NO MORE CODING! I won't have to touch any web servers or nuffin like that anymore. (As far as I know)
Nothing but SA/DBA things to do.
|
|
|
|
|
GenJerDan wrote: Nothing but **/DBA things to do.
So you will be backing up backups of backups
|
|
|
|
|
Probably.
I should get one of the beep-beep-beep-beep things so people will know when I'm backing up.
|
|
|
|
|
|
First Pokemon and now Admon.
Good luck.
The language is JavaScript. that of Mordor, which I will not utter here
This is Javascript. If you put big wheels and a racing stripe on a golf cart, it's still a f***ing golf cart.
"I don't know, extraterrestrial?"
"You mean like from space?"
"No, from Canada."
If software development were a circus, we would all be the clowns.
|
|
|
|
|
GenJerDan wrote: NO MORE CODING
Only scripting then?
...and wte does IGMO mean?
"Go forth into the source" - Neal Morse
|
|
|
|
|
Well, being the Lounge, I decided to replace the F with an *.
Google will tell you what FIGMO means...except they'll be wrong. "Elephant it, got my orders."
|
|
|
|
|
Thanks! It's always good to learn another useful acronym!
"Go forth into the source" - Neal Morse
|
|
|
|
|
BOHICA gets a lot of use, too.
|
|
|
|
|
That's a good explanation. I googled for "IGMO", and it did not seem to fit
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Are dentists afraid of molar bears?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|