Comments (3)
I'd appreciate this as well. I have yet to come across a better pure-scala solution for dependency injection and modularity. I'm vaguely familiar with the reader monad pattern, but that seems a stretch too far for general use, when many devs are likely unfamiliar with the intricacies of FP.
from scala-best-practices.
Is that a good example to replace the cake pattern?
http://di-in-scala.github.io/
from scala-best-practices.
@thiagoandrade6, @jawshooah, the alternative to the Cake Pattern is plain old constructor arguments.
Why would you do something like this:
trait SomeServiceComponent {
val someService: SomeService // abstract
trait SomeService { ??? }
}
trait SomeServiceComponentImpl extends SomeServiceComponent {
self: DBServiceComponent =>
val someService = new SomeServiceImpl
class SomeServiceImpl extends SomeService { ??? }
}
When this is much more readable and common sense:
class SomeService(db: DBService) { ??? }
Oh, are your dependencies going crazy? Are those constructors starting to hurt? That's a feature IMHO. I call it "pain driven development" (PDD for short). It's a sign that the architecture has started to suck and the various dependency injection techniques (such as libraries, or the Cake pattern) are not fixing the problem, but the symptoms. I wrote an article about it. It's fairly controversial, which is how I like it :-) ... https://www.bionicspirit.com/blog/2015/12/15/avoid-javaisms-code-smell.html
Anyway, the bottom line is that the answer to "Why not Cake, specifically?" is because I've never seen a codebase that uses the Cake pattern and that doesn't suck. For example by looking at that sample above you should have immediately realized that those components are probably missing lifecycle management. I would say YMMV, but I won't because I want to be proven wrong.
from scala-best-practices.
Related Issues (20)
- Writing effective tests? HOT 5
- Use if-else vs pattern matching for booleans HOT 8
- Add rule on not doing TODO comments HOT 1
- Add a rule about best / bad practices for implicits and context bounds HOT 7
- Rule about updating a var for loops or conditionals HOT 17
- IMPORTANT: Rewriting history of repository HOT 2
- 3.4. SHOULD be mindful of the garbage collector — Incorrect example HOT 2
- Rule 5.1 needs a *good* example HOT 1
- Scala `return` actually throws `NonLocalReturnControl[A]` now
- 2.17 Nested case classes? HOT 1
- Update rule 2.11 to discourage use of joda-time in favour of java.time HOT 3
- 2.3 Clarity HOT 2
- Reference to JMH, Scala Meter HOT 2
- Add a rule for NOT using Seq.head HOT 1
- explicit section/subsection numbers make it harder to contribute HOT 2
- Add a rule: case classes SHOULD be final HOT 4
- Usage of underscore
- Suggestion SHOULD NOT use scala.App HOT 1
- [question] Usage of return HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from scala-best-practices.