title: Are there any good API design patterns where WRITES are separated from READS?
body: <p>I'm writing a relatively simple web application made of three tiers:</p>
  
  <ol>
  <li>Frontend: Very thin Controllers</li>
  <li>Business Logic: Domain specific Services</li>
  <li>Storage: Thin repository Classes</li>
  </ol>
  
  <p>As suggested above, most of the business logic is in the Services tier 2.</p>
  
  <p>As I write these classes, I find myself treating READ methods very differently to WRITE methods.</p>
  
  <h2>READ Methods in the Service classes</h2>
  
  <p>For example, there aren't overly strict argument checks in the READ methods. A lot of the time, for simple reads, the Service methods are simply implementing the Repository methods almost with just one line.</p>
  
  <h2>WRITE Methods in the Service classes</h2>
  
  <p>With the WRITE methods however I find myself doing way more argument checking, and business logic implementing. In fact in my service classes I have a dependency on a <em>Rules</em> class which only really gets used by my WRITE methods. There is biz logic in READS too, but logic is more strict on WRITES.</p>
  
  <h2>Other <em>arguments</em> for possibly separating READS and WRITES</h2>
  
  <p>I also feel like when implementing a service class and looking for a method in a class, in my mind  first have an idea of whether I want to READ or WRITE, and then I look for the method.</p>
  
  <p>I also feel like when looking for a method in a class, it seem messy to have to separate READS and WRITES by arbitrary method names that start with "Create", "Update", "Get", "Retrieve" etc. etc.</p>
  
  <h2>Possible <em>problems</em> and, is it a good idea to separate?</h2>
  
  <p>I guess I'm looking for a <strong>tried and tested pattern</strong>. I could try implementing it myself, but I already feel like <strong>there could be problems</strong>, like <strong>over complicating design</strong>, or <strong>circular references</strong>, <strong>repetition of logic</strong>, eg. the READ class may depend on the WRITE class and vice versa.</p>