<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: On Mobile Objects</title>
	<atom:link href="http://lostechies.com/evanhoff/2007/11/10/on-mobile-objects/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/evanhoff/2007/11/10/on-mobile-objects/</link>
	<description>Just another LosTechies site</description>
	<lastBuildDate>Thu, 11 Sep 2008 15:52:56 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Russell</title>
		<link>http://lostechies.com/evanhoff/2007/11/10/on-mobile-objects/#comment-47</link>
		<dc:creator>Russell</dc:creator>
		<pubDate>Mon, 12 Nov 2007 10:25:47 +0000</pubDate>
		<guid isPermaLink="false">/blogs/evan_hoff/archive/2007/11/09/on-mobile-objects.aspx#comment-47</guid>
		<description>Hi Evan,

I have some questions regarding your post on Mobile Objects. Like the reader who asked you that question, we too have decided on mobile objects to simplify the amount of code that needs to be duplicated between client and server. We don&#039;t use RPC (i&#039;ve been burnt with DCOM too many times to make that mistake again), so maybe none of the discussion applies to our architecture, but to be sure, I&#039;d appreciate your advice.

Our client software is a thin client that persists no information itself. All information is retrieved from the server. Our domain model is light weight and uses the manager model to enforce business logic and persist information via respositories. All domain model classes are serializable and contain no logic of their own aside from basic validation. All objects implement custom serialization in order to allow for basic versioning.

The managers are implemented using interfaces, for which we&#039;ve created an interface proxy on the client side. The client and server use exactly the same objects and the same manager interfaces. The only difference being that the implementation of the manager on the client directly proxies all calls to the server&#039;s manager implementation. The client managers also implement caching to minimize unecessary round-trips. Where necessary, client managers can also be overriden to implement client specific validation or more intelligent caching.

The managers are rough grained as all calls are assumed to be remote. But as the domain objects are light weight, this is rarely an issue.

We&#039;re convinced that this is a good architecture for our situation, but like your other reader, I&#039;m now worried that there is some major pittfall that I&#039;m just not seeing. The only real issue that we&#039;re aware of is tight-coupling between our client and server, but in our environment this isn&#039;t considered major.

We don&#039;t use DTO&#039;s nor really see the benefit in this situation. We often create 2 classes for each domain object. For instance we&#039;d have a Customer object that contains only basic information that would be needed to display in a list. Then we&#039;d have a descendant CustomerDetail object that would contain the detail like addresses etc. Our ICustomerManager would have a method like GetCustomers() that would return a List&lt;Customer&gt; and another method GetCustomerDetail(int code) that would return a CustomerDetail object. In a way I suppose that is a DTO, but certainly not in the way that Martin Fowler describes using it.

So the question really is this:

* Is our architecture based on bad practises (violating the First Law of Distributed Object Design)?
* If it is, what would suggest doing in this kind of architecture to fix the issue?

BTW, I was going to try and contact you directly, but I must be blind, I can&#039;t find anywhere to do so!

</description>
		<content:encoded><![CDATA[<p>Hi Evan,</p>
<p>I have some questions regarding your post on Mobile Objects. Like the reader who asked you that question, we too have decided on mobile objects to simplify the amount of code that needs to be duplicated between client and server. We don&#8217;t use RPC (i&#8217;ve been burnt with DCOM too many times to make that mistake again), so maybe none of the discussion applies to our architecture, but to be sure, I&#8217;d appreciate your advice.</p>
<p>Our client software is a thin client that persists no information itself. All information is retrieved from the server. Our domain model is light weight and uses the manager model to enforce business logic and persist information via respositories. All domain model classes are serializable and contain no logic of their own aside from basic validation. All objects implement custom serialization in order to allow for basic versioning.</p>
<p>The managers are implemented using interfaces, for which we&#8217;ve created an interface proxy on the client side. The client and server use exactly the same objects and the same manager interfaces. The only difference being that the implementation of the manager on the client directly proxies all calls to the server&#8217;s manager implementation. The client managers also implement caching to minimize unecessary round-trips. Where necessary, client managers can also be overriden to implement client specific validation or more intelligent caching.</p>
<p>The managers are rough grained as all calls are assumed to be remote. But as the domain objects are light weight, this is rarely an issue.</p>
<p>We&#8217;re convinced that this is a good architecture for our situation, but like your other reader, I&#8217;m now worried that there is some major pittfall that I&#8217;m just not seeing. The only real issue that we&#8217;re aware of is tight-coupling between our client and server, but in our environment this isn&#8217;t considered major.</p>
<p>We don&#8217;t use DTO&#8217;s nor really see the benefit in this situation. We often create 2 classes for each domain object. For instance we&#8217;d have a Customer object that contains only basic information that would be needed to display in a list. Then we&#8217;d have a descendant CustomerDetail object that would contain the detail like addresses etc. Our ICustomerManager would have a method like GetCustomers() that would return a List<customer> and another method GetCustomerDetail(int code) that would return a CustomerDetail object. In a way I suppose that is a DTO, but certainly not in the way that Martin Fowler describes using it.</p>
<p>So the question really is this:</p>
<p>* Is our architecture based on bad practises (violating the First Law of Distributed Object Design)?<br />
* If it is, what would suggest doing in this kind of architecture to fix the issue?</p>
<p>BTW, I was going to try and contact you directly, but I must be blind, I can&#8217;t find anywhere to do so!</p>
<p></customer></p>
]]></content:encoded>
	</item>
</channel>
</rss>
