<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Entity Addressing on Bitsy Services Wiki</title>
    <link>https://wiki.bitsy.services/wiki/cs/entity-addressing/</link>
    <description>Recent content in Entity Addressing on Bitsy Services Wiki</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://wiki.bitsy.services/wiki/cs/entity-addressing/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Relational vs. Object-Oriented Databases</title>
      <link>https://wiki.bitsy.services/wiki/cs/entity-addressing/relational-vs-oodbms/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://wiki.bitsy.services/wiki/cs/entity-addressing/relational-vs-oodbms/</guid>
      <description>&lt;p&gt;The relational and object-oriented database camps disagreed about the most basic question a data store has to answer: &lt;strong&gt;what is an entity, and how do you point at one?&lt;/strong&gt; The relational model says an entity is a row in a table, identified by the values of its primary-key columns and reachable only by querying that table. An object-oriented database (OODBMS) says an entity is an object with its own machine-level identity, reachable by following a reference &amp;ndash; much like a pointer in a programming language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Aggregate Root</title>
      <link>https://wiki.bitsy.services/wiki/cs/entity-addressing/aggregate-root/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://wiki.bitsy.services/wiki/cs/entity-addressing/aggregate-root/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;aggregate root&lt;/strong&gt; is one of the central tactical patterns from Eric Evans&amp;rsquo; &lt;em&gt;&lt;a href=&#34;https://www.domainlanguage.com/ddd/&#34;&gt;Domain-Driven Design&lt;/a&gt;&lt;/em&gt; (2003). It is a deliberate, modelling-layer answer to the &lt;a href=&#34;https://wiki.bitsy.services/wiki/cs/entity-addressing&#34;&gt;entity-addressing question&lt;/a&gt;: some entities should be referenceable from anywhere in the system, and others should be reachable only by going through one of those privileged entities.&lt;/p&gt;&#xA;&lt;p&gt;An &lt;strong&gt;aggregate&lt;/strong&gt; is a cluster of associated domain objects that should be treated as a single unit for the purposes of data changes. The &lt;strong&gt;aggregate root&lt;/strong&gt; is the one entity in the cluster that the outside world is allowed to hold a reference to. Everything else inside the aggregate is addressed as &lt;em&gt;(root, local id)&lt;/em&gt; &amp;ndash; second-class within the application&amp;rsquo;s object graph, even if it happens to be persisted as its own row in a relational store.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Actor Model</title>
      <link>https://wiki.bitsy.services/wiki/cs/entity-addressing/actor-model/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://wiki.bitsy.services/wiki/cs/entity-addressing/actor-model/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;actor model&lt;/strong&gt; is a model of concurrent computation in which every entity is an independently addressable &lt;em&gt;actor&lt;/em&gt; with its own identity, private state, and behaviour. Computation proceeds by passing asynchronous messages between actors. There is no shared memory, no implicit container holding the actors, and no global lock &amp;ndash; each actor is its own consistency boundary.&lt;/p&gt;&#xA;&lt;p&gt;It is the maximal expression of the first-class-object stance from the &lt;a href=&#34;https://wiki.bitsy.services/wiki/cs/entity-addressing&#34;&gt;broader entity-addressing tension&lt;/a&gt;: rather than putting many entities inside one process and addressing them by a local id, the actor model gives every entity its own globally unique identity and lets the runtime route messages directly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>First-Class vs. Second-Class Entities</title>
      <link>https://wiki.bitsy.services/wiki/cs/entity-addressing/first-class-entities/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://wiki.bitsy.services/wiki/cs/entity-addressing/first-class-entities/</guid>
      <description>&lt;p&gt;In programming-language theory, an entity is &lt;strong&gt;first-class&lt;/strong&gt; if it can be treated like any other value in the language: named with a variable, passed as an argument, returned from a function, stored in a data structure, and tested for equality. An entity is &lt;strong&gt;second-class&lt;/strong&gt; if it lacks one or more of those affordances and must instead be referred to indirectly &amp;ndash; through whatever container or syntactic construct privileges it.&lt;/p&gt;&#xA;&lt;p&gt;The terminology is due to Christopher Strachey&amp;rsquo;s 1967 lecture notes &lt;em&gt;&lt;a href=&#34;https://web.archive.org/web/20060326035955/http://www.cs.cmu.edu/~crary/819-f09/Strachey67.pdf&#34;&gt;Fundamental Concepts in Programming Languages&lt;/a&gt;&lt;/em&gt;, where he observed that in many languages &amp;ldquo;procedures are second-class citizens &amp;ndash; they always have to appear in person and never can be represented by a variable or expression.&amp;rdquo; The phrase stuck, and the distinction it captures has turned out to be one of the most useful lenses for comparing language designs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resource-Oriented vs. RPC</title>
      <link>https://wiki.bitsy.services/wiki/cs/entity-addressing/resource-vs-rpc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://wiki.bitsy.services/wiki/cs/entity-addressing/resource-vs-rpc/</guid>
      <description>&lt;p&gt;Two architectural stances dominate the design of networked APIs. &lt;strong&gt;Resource-oriented&lt;/strong&gt; designs (the &lt;a href=&#34;https://en.wikipedia.org/wiki/REST&#34;&gt;REST&lt;/a&gt; family) give every conceptually distinct entity its own URI and address it directly using a small, uniform set of verbs. &lt;strong&gt;Remote-procedure-call&lt;/strong&gt; designs (&lt;a href=&#34;https://en.wikipedia.org/wiki/Remote_procedure_call&#34;&gt;RPC&lt;/a&gt;: SOAP, XML-RPC, gRPC, JSON-RPC) expose operations on a service endpoint and pass entity identifiers as parameters.&lt;/p&gt;&#xA;&lt;p&gt;The distinction maps cleanly onto the &lt;a href=&#34;https://wiki.bitsy.services/wiki/cs/entity-addressing&#34;&gt;broader entity-addressing tension&lt;/a&gt;. REST treats each resource as a first-class object with a global, dereferenceable address. RPC treats resources as rows inside a service container, addressed by parameter rather than by URI.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
