Are people, their critics, really bothered with the writing aspect of verbose code?
Verbose code - and their example shows it quite well - is less concise. To me, their example and reasoning looks more overly verbose, over-engineered rather than well or thoroughly designed and safe.
What makes more sense depends on the context. Where is and will it be used? What is it being exposed to?
A simple data holding class for one “internal” layer to the next can have a very simple form, so it’s easily understood. It may not be safe against misuse or mistakes, but the simplicity and clear use-case and intention much outweighs those costly safeguards to me. For maintainability, for readability, for clarity.
It’s always a balancing act between simplicity and easy understanding vs safeguards and costs. If there’s less risk you can make it much simpler - which reduces other, less obvious risks and costs.
The example made me immediately spot how C# quite a while ago introduced language constructs for what would otherwise be a lot of boilerplate programming like they do in their example.
public record Reservation(DateTimeOffset Date, string Email, string Name, int Quantity, bool IsAccepted);
no need for 78 lines of code with 9 methods.
C# also has the with
keyword for copy-adjusting immutable types.
And required
init
syntax provides another alternative for an effectively immutable type.
public class Reservation
{
public required DateTimeOffset Date { get; init; }
public required string Email { get; init; }
public required string Name { get; init; }
public required int Quantity { get; init; }
public required bool IsAccepted { get; init; }
}