<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jason Grey &#187; Services</title>
	<atom:link href="http://www.jason-grey.com/category/services/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jason-grey.com</link>
	<description>web development, mobile, service oriented architecture, flex, flash, silverlight, ajax and so on.</description>
	<lastBuildDate>Wed, 27 May 2009 00:48:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>What makes a good component/service?</title>
		<link>http://www.jason-grey.com/2008/10/what-makes-a-good-componentservice/</link>
		<comments>http://www.jason-grey.com/2008/10/what-makes-a-good-componentservice/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 15:46:54 +0000</pubDate>
		<dc:creator>jg</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://www.jason-grey.com/?p=23</guid>
		<description><![CDATA[A few collected thoughts &#38; notes from around the web regarding what makes a good component/service.

Interface &#8211; all implementations share this. Should have few methods, use data objects as return values, take primitives as inputs, throw only custom exceptions, and be very, very well documented.
Implementations &#8211; implement the logic behind the service. May provide extra [...]]]></description>
			<content:encoded><![CDATA[<p>A few collected thoughts &amp; notes from around the web regarding what makes a good component/service.</p>
<ul>
<li>Interface &#8211; all implementations share this. Should have few methods, use data objects as return values, take primitives as inputs, throw only custom exceptions, and be very, very well documented.</li>
<li>Implementations &#8211; implement the logic behind the service. May provide extra features such as caching, or such things as optional collaborations.</li>
<li>Data &#8211; data objects this service deals with. Should be immutable, comparable, cloneable as much as is possible. Should be serializable/XML/Persistance annotated in most languages.</li>
<li>Storage &#8211; Data (or data.io) package should define storage API, and an in-memory data store. Allow other services/projects/subprojects to define database backed or other kinds of data stores.</li>
<li>Cache &#8211; Data.Cache packages should define cache API? (or can this be standard per runtime?) Who should be in charge of caching? The service itself, or the user of the service?</li>
<li>Use dependency injection for all services/data stores it requires. Use constructor-injection as much as possible.</li>
<li>Throw errors early &#8211; in constructor if possible.</li>
<li>Exceptions &#8211; custom exceptions for high level categories of erroneous behavior (try not to do one for every possible condition &#8211; classify, and wrap). Don&#8217;t re-throw exceptions from other frameworks &#8211; wrap in custom exception.</li>
<li>Make behavior configurable via dep injection as much as possible. Use filters or strategies.</li>
<li>Inject 1 configuration object instead of many options. Standardize on configuration API/Framework for each runtime/language.</li>
<li>Standardize on logging framework/API for each runtime/language, and make sure it&#8217;s used (instead of System.out or simliar)</li>
<li>Provide events/messages and/or hooks for important happenings so others can do things pre/post.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.jason-grey.com/2008/10/what-makes-a-good-componentservice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check out Google Base</title>
		<link>http://www.jason-grey.com/2006/03/check-out-google-base/</link>
		<comments>http://www.jason-grey.com/2006/03/check-out-google-base/#comments</comments>
		<pubDate>Sun, 05 Mar 2006 02:44:52 +0000</pubDate>
		<dc:creator>jg</dc:creator>
				<category><![CDATA[Services]]></category>

		<guid isPermaLink="false">http://www.jason-grey.com/2006/03/04/check-out-google-base/</guid>
		<description><![CDATA[Google&#8217;s got another great beta out there &#8211; Google Base. It&#8217;s a place for you to post your own content. They take it a step further by allowing you to define (or use predefined) content types. Each content type has a set of attributes. Then, custom search interfaces are provided against the content types, for [...]]]></description>
			<content:encoded><![CDATA[<p>Google&#8217;s got another great beta out there &#8211; <a href="http://base.google.com/">Google Base</a>. It&#8217;s a place for you to post your own content. They take it a step further by allowing you to define (or use predefined) content types. Each content type has a set of attributes. Then, custom search interfaces are provided against the content types, for example, see <a href="http://base.google.com/base/search?a_n0=recipes&amp;scoring=ld&amp;a_y0=0&amp;a_s0=0&amp;a_r=1">recipes</a>. Doesn&#8217;t seem like there&#8217;s an API out there yet, so I think this is of limited use for now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jason-grey.com/2006/03/check-out-google-base/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
