The first example should work just fine.
You usual way is to create the layers in __init__ and call them in forward.
If you would like you can also create another member function to create your layers, but you should still call it in __init__.
What do you mean by write the same block over and over again? Do you have an example? Currently your second approach seems to need more lines of code.