Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 2e9c43658e374d290a2de15d25134ac8 > files > 464

db4o-doc-8.0-1.fc15.i686.rpm

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" MadCap:lastBlockDepth="2" MadCap:lastHeight="120" MadCap:lastWidth="624" MadCap:disableMasterStylesheet="true" MadCap:tocPath="Advanced Features|Type Handling" MadCap:InPreviewMode="false" MadCap:RuntimeFileType="Topic" MadCap:TargetType="WebHelp" MadCap:PathToHelpSystem="../../../" MadCap:HelpSystemFileName="index.xml" MadCap:SearchType="Stem">
    <head><title>TypeHandlers</title>
        <script type="text/javascript">/* <![CDATA[ */
window.onload = function(){
	var pathToFlash = $('html').attr('MadCap:PathToHelpSystem') + 'Content/Resources/Code/ZeroClipboard.swf';
	ZeroClipboard.setMoviePath(pathToFlash);
			
	function bindToClipBord(element,content){
		var clip = new ZeroClipboard.Client();
		clip.setText(content);
		clip.glue(element);
	};
		
	if(location.protocol==='file:'){
		$('.copylink-marker').remove();
	} else{
			$('.copylink-marker').each(function(){
				var text = $(this).parent().parent().children('.prettyprint').html();
				$(this).hover(function(){
					bindToClipBord(this,text);
				},
				function(){});
			});	
	}		
	prettyPrint();	
};
                /* ]]> */</script>
        <link href="../../SkinSupport/MadCap.css" rel="stylesheet" />
        <link href="../../Resources/Stylesheets/OnlineStyle.css" rel="stylesheet" />
        <script src="../../Resources/Code/prettify.js">
        </script>
        <script src="../../Resources/Code/lang-vb.js">
        </script>
        <script src="../../Resources/Code/jquery.min.js">
        </script>
        <script src="../../Resources/Code/ZeroClipboard.js">
        </script>
        <script src="../../SkinSupport/MadCapAll.js" type="text/javascript">
        </script>
    </head>
    <body>
        <p class="MCWebHelpFramesetLink" style="display: none;"><a href="../../../index_CSH.html#advanced_topics/type_handling/typehandlers.htm" style="">Open topic with navigation</a>
        </p>
        <div class="MCBreadcrumbsBox"><span class="MCBreadcrumbsPrefix">You are here: </span><a class="MCBreadcrumbsLink" href="../../advanced_topics.htm">Advanced Features</a><span class="MCBreadcrumbsDivider"> &gt; </span><a class="MCBreadcrumbsLink" href="../type_handling.htm">Type Handling</a><span class="MCBreadcrumbsDivider"> &gt; </span><span class="MCBreadcrumbs">TypeHandlers</span>
        </div>
        <p>
            <script type="text/javascript">/*<![CDATA[*/document.write('<a href="' + location.href +'">');
				document.write("Direct Link");
			document.write('</a>');/*]]>*/</script>
        </p>
        <p>
        </p>
        <h1><a name="kanchor88"></a>TypeHandlers</h1>
        <p>One of the most important and convenient things that db4o provides is the
ability to store any object just as it is: no interfaces to be implemented, no
custom fields, no attributes/annotations - nothing, just a plain object.
However, it is not as simple as it may seem - objects are getting more and more
complex and sometimes the generic solution is not good enough for specific
objects. </p>
        <p>This problem was recognized by db4o team long ago, and various solutions
were provided to customize the way an object is stored: <a href="translators.htm">Translators</a>, transient fields in Java and <a href="../../tuning/selective_persistence/transient_fields_in_.net.htm">.NET</a> <![CDATA[ ]]>etc. However all these means were rather fixing the symptoms but
not the disease itself. And the fact is that there is no single generic way to
store just any available or future object in the best possible way. But luckily
we don't even need it - all we need is a way to write a specific
persistence solution for any custom object, and now db4o provides this way
though a pluggable <span MadCap:conditions="Primary..NET">I</span>TypeHandler4 interface. You can register any number of type handlers to the configuration. Additionally you need to register a predicate which decides which classes are handled by the type handler. </p>
        <div class="codesnippet" MadCap:conditions="Primary.c#">
            <pre class="prettyprint" xml:space="preserve">IEmbeddedConfiguration configuration = Db4oEmbedded.NewConfiguration();
configuration.Common.RegisterTypeHandler(
    new SingleClassTypeHandlerPredicate(typeof(StringBuilder)), new StringBuilderHandler());</pre>
            <div class="codesnippet-meta">TypeHandlerExample.cs: Register type handler
			<div class="codedownload"><a href="../../CodeExamples/typehandling/typehandler/Example-typehandling-typehandler-csharp.zip" class="codedownload" MadCap:conditions="Primary.Online">Download Code</a></div><div class="codedownload copylink-marker" MadCap:conditions="Primary.Online"><a href="#copy">Copy Code</a></div></div>
        </div>
        <div class="codesnippet" MadCap:conditions="Primary.VB.NET">
            <pre class="prettyprint lang-vb" MadCap:conditions="Primary.Online" xml:space="preserve">Dim configuration As IEmbeddedConfiguration = Db4oEmbedded.NewConfiguration()
configuration.Common.RegisterTypeHandler(
    New SingleClassTypeHandlerPredicate(GetType(StringBuilder)), New StringBuilderHandler())</pre>
            <div class="codesnippet-meta">TypeHandlerExample.vb: Register type handler
			<div class="codedownload"><a href="../../CodeExamples/typehandling/typehandler/Example-typehandling-typehandler-vb.zip" class="codedownload" MadCap:conditions="Primary.Online">Download Code</a></div><div class="codedownload copylink-marker" MadCap:conditions="Primary.Online"><a href="#copy">Copy Code</a></div></div>
        </div>
        <p>Note that type handler are a low level API which doesn't protect you from any mistakes. If you make a mistake in a typehandler you can loose data.</p>
        <p>Type handler functionality is best explained on a <a href="typehandlers/custom_typehandler_example.htm">working example</a>.</p>
        <p>Usecases and other benefits of the pluggable typehandler interface are
reviewed <a href="typehandlers/pluggable_typehandler_benefits.htm">here</a>.</p>
        <p>&#160;</p>
        <p>&#160;</p>
        <script type="text/javascript" src="../../SkinSupport/MadCapBodyEnd.js">
        </script>
    </body>
</html>