> "Why don't you just add these patterns into your computer language as abstractions? Wouldn't that aid comprehension even more?"
I often asked myself this question! Why do I have to say
public class DatabaseConnectionSingleton {
public static DatabaseConnectionSingleton getInstance (){ ... };
}
and then get an object using:
var db = DatabaseConnectionSingleton.getInstance();
Why can't I say
public singleton DatabaseConnection {...}
and just go
var db = new DatabaseConnection();
and let my runtime make sure that I get the appropriate instance? Left aside the discussion of how useful that pattern is, I would like my language to be more powerful. I am aware of alternatives (Borgs in Python) and that many people consider Singletons an antipattern, as it helps introduce globally shared state, etc. but then, why do I have to care about how instances are implemented?
After all, in C#, foreach interacts with iterators, why not push other mechanisms down into the language in the same way?
Ideas:
// Unit of work, commits changes before the reference gets removed from stack
public unit CustomerForm { }
// There can be only one.
public singleton DatabaseConnectionHighlander {}
// Any method called updates values in some way
public builder QueryString {}
It's true that other languages often don't require certain patterns. Strategy and Visitor are often unnecessary when a programming language has functions as first class citizens.
I found that it often helps to remember that the GoF book was written about object oriented patterns with C++.
I often asked myself this question! Why do I have to say
and then get an object using: Why can't I say and just go and let my runtime make sure that I get the appropriate instance? Left aside the discussion of how useful that pattern is, I would like my language to be more powerful. I am aware of alternatives (Borgs in Python) and that many people consider Singletons an antipattern, as it helps introduce globally shared state, etc. but then, why do I have to care about how instances are implemented?After all, in C#, foreach interacts with iterators, why not push other mechanisms down into the language in the same way?
Ideas: