While I don't care much about numbers, I check #TwitterAnalytics from time to time mostly because of monthly summaries. Let me tell you that last 28 days were pretty intense comparing to previous period π
Let's look what happened! π
First of all @davorminchorov mentioned me in his thread about enums. We initially had discussion about them under his PR (github.com/learnhubdev/laβ¦), but this thread extended it even more π
In the meantime I wrote thread about Value Objects and that's my Top Tweet with 12.5K impressions earned π I'm pretty satisfied with it because it looks like many people found it, ekhm, Valueable π
My Top media Tweet earned 3,169 impressions and it was about #Git rebase command. I am a rebase advocate and was able to convert few developers I worked with, maybe I can convince you too π?
My Top Follower in this period is none other than @matthiasnoback and that was one of the best moments of December π Being followed by person such widely recognised in #PHP world is a massive compliment for me. Thank you!
Of course big THANKS π» to all of 70 new followers, I hope you enjoyed my content in this period and I'm looking forward to deliver more helpful stuff in the future π
As always I am open for discussion, so don't hesitate and give feedback, please π
Cheers!
β’ β’ β’
Missing some Tweet in this thread? You can try to
force a refresh
In recent days I saw several examples of "actions" in #Laravel, but one especially got my attention and I wanted to clarify it - so we had little discussion with @wendell_adriel and I would like to share my opinion about this particular approach π
Before we start, one important preface: I'm big fan of explicitness and testability, so I'm using dependency injection everywhere (where's applicable). Examples in this thread will use it too by default, along with #PHP 8.0+ syntaxes.
What caught my attention was instantiating action inside controller's method π€ That looked suspicious, because I'm used to different nomenclature.
My assumption after looking at the example was that `CreateUserAction` is more like a #CQRS command rather than action.
π€ Dictionaries: should they be in the database? π€
Dictionary is set of values that are supported in your application. But how they should be defined? Well, as always, it depends π #PHP#architecture
Let me tell you what I think about it ππ§΅
In general, I believe there are two types of dictionaries:
1) Internal, related to your app's logic 2) UI-managable, related to app instance's data
Let's look about difference between them π
Internal dictionaries are represented in the code. With #PHP 8.1+ it's pretty straightforward - you can use enums π When you need to represent some state, string-backed enum is the best choice, because it's much better for debugging purposes.
Basically, it's a simple object representation of some kind of reusable data structure. Unlike entity, it does not have identity, so value objects are considered as equal if underlying data is equal.
Want to know more? Read below π𧡠#architecture
Value Objects encapsulate data and ensure its validity - constructor can, and should, check if provided primitive values are correct. Thanks to that, when you pass VO to other methods, you can be sure it carries proper information π
Value Object's reusability doesn't mean you reuse data it carries. You reuse its structure across other Value Objects or Entities. Name can be used for modelling Employee, Client and other.
So you can have several John Doe employees with the same Name, but different Id π
There were many discussions if #Laravel's facades implement GoF's Facade Pattern, but I think it does not matter at this point - the team won't change naming convention anyway. Naming is not a problem, I see other issues with facades - a #PHP thread π§΅
1) They're basically magic πͺ Some may see it as advantage, but I consider it as drawback. You don't execute exact code you're calling, but your call is proxied to some underlying service. It strictly couples your code with the framework, which handles it.
Facades' API has to be added as comments in PHPDoc (with `@Method`) which is error prone because it's easy to forget to update facade's phpdoc when underlying service (accessor) is changed. But even if autocompletion in IDE works, you just can't simply navigate to method's code.