I like implementing service classes as stateless. However, I also like to decompose my logic into more, simple methods or functions. In some scenarios it seems like the two are somewhat against each other. Consider the following two examples.I have an entity object called House, implemented something like this.public class House {  public string Address { get; set; }  public List<Room> Rooms { get; set; }  ...  public IEnumerable<Furniture> GetAllFurnitures() {    return Rooms.SelectMany(e => e.Furnitures);  }  ...}1. Stateful implementationPros: cleaner code, no parameter hellCons: one service per one House, makes Dependency injection harder because of constructor parameterpublic class HouseCleaner {  private readonly House _house;  public HouseCleaner(House house) {    _house = house;  }  public void Clean() {    vacuumClean();    cleanBathroom();    cleanToilettes();    cleanKitchen();    wipeFloor();  }}2. Stateless implementationPros: the service instance can be shared, makes Dependency injection easierCons: need to pass probably many parameters to all simple methods and functions to share the current statepublic class HouseCleaner {  public void Clean(House house) {    vacuumClean(house);    cleanBathroom(house);    cleanToilettes(house);    cleanKitchen(house);    wipeFloor(house);  }}Which one do you feel more appropriate considering that this is a simplified example. In reality there could be several service dependencies, and other parameters too.
Stateless service classes and method decomposition
c#;service
There are arguments for both. The choice as it is said depends.The first approach can be scaled, because you can create many instances of service (i.e. multithreaded service) - but the service must be lightweight.The second approach on the other hand is better suited for fat services that take time to instantiate. It is better to share them. As for the cons for it you've mentioned, it can be applied to both variants. But it can be overcome using aggreagates. As Mark Seeman states in his book Dependency injection in .NET - you should find or create a more aggregated class that would combine the desired classes, providing a wider meaning.