According to OpenZeppelins (OZ) recommendation, it is recommended to make it impossible for anyone to execute the initialize function on an implementation contract by adding an empty constructor with the initializer modifier. This way, the implementation contract is automatically initialized upon deployment.
Its worth nothing that this approach has also been incorporated into the OZ Wizard since the discovery of the UUPS vulnerability. In fact, the code generated by Wizard 19 has been modified to include a constructor that automatically initializes the implementation upon deployment.
This practice also helps prevent possible attacks in which someone tries to perform an initialization transaction before the creator of the contract, which could compromise the security of the contract.
