4 ms·
You've never seen Java (or C#) code where a bunch of unrelated functions belong to some meaningless class like "Utility"? I do think both languages would benef
by wizofaus 3y ago
You've never seen Java (or C#) code where a bunch of unrelated functions belong to some meaningless class like "Utility"?
I do think both languages would benefit from allowing/ encouraging namespace-level functions (C# comes close with static classes but that's pretty clearly an abuse of any logical definition of the word "class"). However I probably wouldn't use them for implementing "controllers" in web applications - while I tend to agree it's not a good use of OOP, having key information about the current request/response available via properties of the current controller (and hence kept separate from function-level parameters that represent semantics specific to the endpoint being handled) plus various built-in functionality at the framework-supplied "controller" level isn't something I'd see a benefit in giving up.
But I'll admit there are few cases where a single controller class with methods for various CRUD like operations on a particular resource type makes any sense from an OOP perspective. I did think for C# what might actually work is to be able to define extension methods on the framework Controller class and have an automatic routing mechanism based on convention (e.g. if you defined an extension function "Get_Widget" then GET requests to /widgets would be automatically routed to it. Or it could be based on the namespace). But in general it would likely make the code more verbose (lack of implicit "this") for questionable gain.
- jayd16 3y ago> You've never seen Java (or C#) code where a bunch of unrelated functions belong to some meaningless class like "Utility"? Is that worse than the global scope as the dumping ground? One other benefit of forcing classes is that there's a logical place for private functions and fields. Private state is an anti-pattern to some but it's more consistent design for Java, I think.
- wizofaus 3y ago> Is that worse than the global scope as the dumping ground? I wouldn't have a problem with requiring everything to at least be in a namespace, though it needn't be enforced at the language level (vs a linter rule).
- BeefWellington 3y ago> You've never seen Java (or C#) code where a bunch of unrelated functions belong to some meaningless class like "Utility"? I guess I don't see the problem here; what's wrong with this idea? I've seen people claim "It's not OOP" but without any ability to explain why and I'd love to see the practical difference.
- wizofaus 3y agoI don't have any problem with it not being OOP, but I do have a problem with the abuse of the concept of a "class". I also think it's rarely the ideal way to organise your code (even if the .NET core framework has examples of it - WebUtility/HttpUtility etc., and the JRE may well do too, though I can't see any obvious examples in the java.util namespace).
- BeefWellington 3y agoThe entire java.util namespace is the example here. Using static methods on a class seems perfectly fine to me; that's what they're there for. If you have a handy utility class to work around problems in the standard library, then that's an issue with the standard library; Java has this but has gotten better over the years.