3 ms·
> But how do you handle configuration then ? In the main method, then you can pass the configured values wherever you need to when new-ing classes. > At some
by pgwhalen 5y ago
> But how do you handle configuration then ?
In the main method, then you can pass the configured values wherever you need to when new-ing classes.
> At some point you want a user-facing UI where the available features (which are generally classes) are listed and the user can choose the feature, say which log backend is enabled, without having to change code - that's the whole point of it. (And the most tedious code to write by hand - a complete waste of time)
I consider DI a valuable pattern, but I've never experienced anything close to this need.
- kaba0 5y agoWhat happens with proxied classes? My ClassWithTransactions is actually a subclass of the written one auto-generated by Spring. I can’t inject a new instance of that manually. And you may say that you don’t need Aspect Oriented programming, but the usual handling of transactions in many other languages without some meta-programming is.. to not handle transactions. Putting a single annotation over a method is imo a very elegant way to handle this needed functionality.
- pgwhalen 5y agoThis is all considerably more abstraction than I have wanted or needed when writing Java. When handling transactions, I’ve passed around the same connection before committing.
- kaba0 5y agoThe point of the transaction in this context is that both the database(s) and the business logic/state stay in sync. I don’t think that naive attempts will be logically correct.
- pgwhalen 5y agoWhat do you consider naive? JDBC supports transactions, I’ve had success with that.
- kaba0 5y agoAs I mentioned, you will have to roll back not only the database, but the relevant application state as well. This is really error-prone if repeated enough times, or the flow of control is through many different methods, etc.
- pgwhalen 5y agoBy application state, do you mean something like an in memory cache? I would prefer having no such state in the first place, and have all meaningful state in the DB to be pulled out or mutated as needed. I recognize that what you’re advocating for makes of sense in some applications, I just wanted to point out that I haven’t felt the need for it in my eight years of software development.
- jcelerier 5y ago> I consider DI a valuable pattern, but I've never experienced anything close to this need. Literally every non-toy software I had to develop in my life required that lol
- pgwhalen 5y agoDo you seriously allow users to configure which logging framework is used through a UI? Perhaps I’m misunderstanding what you’re saying.
- jcelerier 5y agoin my case it's more often which audio, gamepad or graphics backend but yes, I actually had the log backend configuration request once ! (wanted to choose to log stuff in text files or websockets depending on the case, for a GUI app ; there was an explicit requirement that the entire software could be configured and used with only a mouse, no keyboard so many configuration menus were needed)