Refactoring to SOLID - Part 2: The Single Responsibility Principle

by Larry Spencer Monday, March 19, 2012 7:37 PM

In the last post, we saw an old-style Web application where all the business logic was in the code-behind for a button. In this post, we will begin the refactoring process. First, here is the old version.

 

protected void BtnSearch_Click(object sender, EventArgs e)
{
    var sbCriteria = new StringBuilder();
    using (var db = new SolidDemoEntities())
    {
        var query = db.Documents.AsQueryable();
        if (!String.IsNullOrWhiteSpace(TxbAccount.Text))
        {
            query = query.Where(d => d.Account.StartsWith(TxbAccount.Text));
            sbCriteria.AppendFormat("Account starts with '{0}' AND ", TxbAccount.Text);
        }

        if (!String.IsNullOrWhiteSpace(TxbLastName.Text))
        {
            query = query.Where(d => d.LastName.StartsWith(TxbLastName.Text));
            sbCriteria.AppendFormat("Last Name starts with '{0}' AND ", TxbLastName.Text);
        }

        if (!String.IsNullOrWhiteSpace(TxbFirstName.Text))
        {
            query = query.Where(d => d.FirstName.StartsWith(TxbFirstName.Text));
            sbCriteria.AppendFormat("First Name starts with '{0}' AND ", TxbFirstName.Text);
        }

        if (sbCriteria.Length > 5)
            sbCriteria.Remove(sbCriteria.Length - 5, 5);
        else
            sbCriteria.Append("-- all records --");

        LblCriteria.Text = sbCriteria.ToString();

        LvwResults.DataSource = query.ToArray();
        LvwResults.DataBind();
    }
}

 

Our beleaguered Search button does far too many jobs. This violates the Single Responsibility Principle -- the S of SOLID -- and is bad for the reasons we saw last time. Merely breaking up the BtnSearch_Click method into component methods does not fix the problem because it's the class that is supposed to have a single responsibility, not just the method.

So what should we break out into a separate class? An immediately obvious candidate is the logic that builds the search criteria. A novice might make a SearchCriteria class and be done with it, but there is an even better approach. Whenever I hear the word "build," I wonder whether the Builder Pattern would be a good fit. In this case, it is. We want to create an object (the search criteria) piece by piece. Once we have added all the pieces, we use the result and no longer care about the building process. That's the Builder Pattern a nutshell.

We will create two classes: SearchCriteriaBuilder and SearchCriteria. If you think of this pattern in terms of the Single Responsibility Principle, SearchCriteriaBuilder has the responsibility of assembling the search criteria, but there is no need to clutter up the SearchCriteria class with the code to build itself. Once you have search criteria, all of that building code is irrelevant.

For good measure, we will add an interface for each class. By abstracting the builder behind an interface, we make it easier to substitute other forms of builders in the future. Likewise for the search criteria.

All four classes and interfaces are generic on T, which is the type of object we are searching for (a Document in the present application).

SearchCriteriaBuilder lets you add criteria with the AndStartsWith method. Later, we might add other operations such as OrStartsWith or AndIsExactlyEqualTo. For now, AndStartsWith illustrates the point.

SearchCriteria's single responsibility is to present the criteria to the world. The criteria may take the form of a "friendly" (comprehensible to a human) string or an Expression suitable for LINQ to Entities.

Here is the code. By the way, note that the interfaces are implemented explicitly, for the reasons I've outlined here.

ISearchCriteriaBuilder<T>

 

namespace Solid.Interfaces
{
    /// <summary>
    /// Builds search criteria. For now, only simple 'AND' searches are supported.
    /// </summary>
    /// <typeparam name="T">The type of object being searched.</typeparam>
    public interface ISearchCriteriaBuilder<T>
    {
        /// <summary>
        /// AND-in a criterion that the property starts with a value.
        /// </summary>
        /// <param name="friendlyName">A name to display to the user.</param>
        /// <param name="propertyName">The name of the property being queried. It must be a string property.</param>
        /// <param name="value">The property's value must start with this string in order to make a match.</param>
        /// <returns>This object, for a fluent interface.</returns>
        ISearchCriteriaBuilder<T> AndStartsWith(string friendlyName, string propertyName, string value);
        
        /// <summary>
        /// Get a SearchCriteria object that reflects the criteria added so far.
        /// </summary>
        /// <returns>A SearchCriteria object.</returns>
        ISearchCriteria<T> GetResult();        
    }
}

 

 

SearchCriteriaBuilder<T>

 

using System;
using System.Linq.Expressions;
using System.Text;
using Solid.Interfaces;

namespace Solid.Core
{
    /// <summary>
    /// Builds search criteria. For now, only simple 'AND' searches are supported.
    /// </summary>
    /// <typeparam name="T">The type of object being searched.</typeparam>
    public class SearchCriteriaBuilder<T> : ISearchCriteriaBuilder<T>
    {
        #region Fields
        StringBuilder _friendlyString = new StringBuilder();

        // All the criteria that we build up for after the => of a lambda on type T.
        Expression _lambdaCriteria = null;

        // The parameter to feed
        ParameterExpression _parameter = Expression.Parameter(typeof(T));
        #endregion

        #region Constructor
        /// <summary>
        /// Constructor.
        /// </summary>
        public SearchCriteriaBuilder()
        {
        }
        #endregion

        #region Public Methods
        /// <summary>
        /// AND-in a criterion that the property starts with a value.
        /// </summary>
        /// <param name="friendlyName">A name to display to the user.</param>
        /// <param name="propertyName">The name of the property being queried. It must be a string property.</param>
        /// <param name="value">The property's value must start with this string in order to make a match.</param>
        /// <returns>This object, for a fluent interface.</returns>
        ISearchCriteriaBuilder<T> ISearchCriteriaBuilder<T>.AndStartsWith(string friendlyName, string propertyName, string value)
        {
            var friendly = String.Format("({0} starts with '{1}')", friendlyName, value);

            // obj.PropertyName
            var propName = Expression.Property(_parameter, propertyName);

            // The value
            var constValue = Expression.Constant(value);

            // obj.PropertyName.StartsWith(value)
            var startsWith = Expression.Call(
                propName,
                typeof(string).GetMethod("StartsWith", new[] { typeof(string) }),
                constValue);

            if (_lambdaCriteria == null) // First time
            {
                _lambdaCriteria = startsWith;
            }
            else // Not first time
            {
                _friendlyString.Append(" AND ");
                _lambdaCriteria = Expression.AndAlso(_lambdaCriteria, startsWith);
            }
            _friendlyString.Append(friendly);
            return this;
        }

        /// <summary>
        /// Get a SearchCriteria object that reflects the criteria added so far.
        /// </summary>
        /// <returns>A SearchCriteria object.</returns>
        ISearchCriteria<T> ISearchCriteriaBuilder<T>.GetResult()
        {
            if (_lambdaCriteria == null)
            {
                return new SearchCriteria<T>(Properties.Resources.CriteriaAllRecords,
                    Expression.Lambda<Func<T, bool>>(Expression.Constant(true), _parameter));
            }
            else
            {
                return new SearchCriteria<T>(
                    _friendlyString.ToString(),
                    Expression.Lambda<Func<T, bool>>(_lambdaCriteria, _parameter));
            }
        }
        #endregion
    }
}

 

 

ISearchCriteria<T>

 

using System;
using System.Linq.Expressions;

namespace Solid.Interfaces
{
    /// <summary>
    /// Represents the criteria for searching for objects of type T.
    /// </summary>
    /// <typeparam name="T">The type of objects being searched.</typeparam>
    public interface ISearchCriteria<T>
    {
        /// <summary>
        /// Get a friendly representation of the criteria.
        /// </summary>
        string FriendlyString { get; }

        /// <summary>
        /// Get the criteria as a LINQ Expression.
        /// </summary>
        Expression<Func<T, bool>> Expression { get; }
    }
}

 

 

SearchCriteria<T>

 

using System;
using System.Diagnostics.Contracts;
using System.Linq.Expressions;
using Solid.Interfaces;

namespace Solid.Core
{
    /// <summary>
    /// Represents criteria for searching a repository of objects of type T.
    /// </summary>
    public class SearchCriteria<T> : ISearchCriteria<T>
    {
        /// <summary>
        /// Get a friendly representation of the criteria.
        /// </summary>
        public string FriendlyString { get; private set; }

        /// <summary>
        /// Get the criteria as a LINQ Expression.
        /// </summary>
        public Expression<Func<T, bool>> Expression { get; private set; }
       
        /// <summary>
        /// Constructor. It is internal because it is intended that the SearchCriteriaBuilder,
        /// in this assemby, be used to construct SearchCriteria.
        /// </summary>
        /// <param name="friendlyString">A user-friendly way of expressing the search criteria.</param>
        /// <param name="expression">A LINQ Expression that contains the search criteria.</param>
        internal SearchCriteria(string friendlyString, Expression<Func<T, bool>> expression)
        {
            Contract.Requires(friendlyString != null);
            Contract.Requires(expression != null);
            
            FriendlyString = friendlyString;
            Expression = expression;
        }
    }
}

 

For faithfully adhering to the Single Responsibility Principle, we have been rewarded with a set of classes and interfaces that are eminently reusable and -- just as important -- easily testable. That's the 'S' of SOLID.

Next time, we'll move on to the 'O' and see what it means for a class to be open for extension but closed for modification.

Tags: , ,

All | Composibility | Dependency Injection | General | Talks

Comments (1) -

9/4/2013 9:21:07 PM #

Britt

A safety on / off switch is assembled in many stairlifts, to stop children or animals to accidentally send the chair lift on its way, and cause undue harm.




Therefore, it is wise to have an electrical system using a back-up. Some stairlifts ( Britt - bbs.mgl9.com/ ) have batteries that recharge themselves each time the chair lift is parked.

Britt

9/8/2013 6:59:00 AM #

paid surveys

Most market research organizations perform  paid surveys - http://www.paidsurveystoplist.net/  on targeted people. They target population by their profile (location, interests, age, gender, education, income, an such like.) For instance if some firm sells their services and products only in a single country, it is going to be natural it is interested only in the opinions from residents of such country.

paid surveys

9/10/2013 7:46:24 AM #

paid surveys

Does this cost such a thing to become an associate of some market research company? The answer is NOT ANY. Joining market research businesses and doing  paid surveys - www.rottenchumguideservice.com/.../entry.php?id=6  is absolutely free. In fact they pay you to really complete surveys!
Plus there clearly was a distinct edge for the homebased business owner the work begins promptly and a free of charge survey can aid with this particular.

paid surveys

9/29/2013 6:59:44 AM #

private webcam shows

In current weeks photograph clip courting has build into tons additional and considerably more properly-liked and it really is practically an extension of on-line courting and an essential and pleasurable component even though employing grownup courting expertise. With video clip clip clip romantic romantic relationship, you might have a higher possibility of getting to determine one a different and this form of courting is an excellent offer way more sensible and passionate. That you are in a placement to effortlessly locate a suitable match for oneself by signifies of online video documenting documenting courting and for that reason this delivers a excellent and current evening working day implies of browsing with the current accomplice.

Here is my site -  private webcam shows - http://webcamgirls.co

private webcam shows

10/1/2013 7:48:27 AM #

stairlifts

There are times that whenever there isn't any electricity in the home you want to use the stairlift only. Just think of natural disasters or perhaps a fire!




Practically, able enough to cope with any amount of sophistication, the Acorn 80 Curved Stairlift could be set up as promptly as a regular stairlift.

Also visit my webpage:  stairlifts - http://www.stairliftscomparison.co.uk

stairlifts

10/2/2013 5:54:57 AM #

program do pit 2013

Hello are using Wordpress for your blog platform? I'm new to the blog world but I'm trying to get started and set up my own. Do you need any html coding expertise to make your own blog? Any help would be really appreciated!|

Feel free to visit my web blog;  program do pit 2013 - http://programypit.pl

program do pit 2013

10/7/2013 3:38:05 AM #

terrence howard threatens suicide

hello!,I really like your writing so a lot! share we communicate extra about your post on AOL? I require a specialist on this house to unravel my problem. Maybe that's you! Taking a look forward to see you.

my site ::  terrence howard threatens suicide - http://www.roseospreymarketing.com/2009/04/06/20

terrence howard threatens suicide

10/7/2013 3:10:29 PM #

one world government

Great blog here! Also your site loads up fast! What web host are you using? Can I get your affiliate link to your host? I wish my web site loaded up as fast as yours lol

Check out my blog ::  one world government - http://9n3.info/4n27

one world government

10/7/2013 4:43:38 PM #

muslim persecution of christians

I’m not that much of a online reader to be honest but your blogs really nice, keep it up! I'll go ahead and bookmark your website to come back later on. Cheers

My blog ::  muslim persecution of christians - http://motelgongsil.com/community_4/20639

muslim persecution of christians

10/7/2013 5:00:38 PM #

funny t shirt sayings quotations

Thanks  for some other wonderful article. The place else could anybody get that kind of information in such an ideal method of writing? I have a presentation next week, and I am on the search for such information.

Also visit my web page  funny t shirt sayings quotations - http://edensign.com/xe/?document_srl=60258

funny t shirt sayings quotations

10/7/2013 10:32:05 PM #

christians vs catholics

We are a group of volunteers and opening a brand new scheme in our community. Your website provided us with helpful info to work on. You've done a formidable job and our entire community will probably be grateful to you.

Look at my web site  christians vs catholics - http://www.fapboy.com/user/8363/EulaliaSt

christians vs catholics

10/8/2013 12:34:53 AM #

funny stories christian

Great post. I will be dealing with some of these issues as well..

My web-site;  funny stories christian - http://www.davidhiscock.ca/balke-balke

funny stories christian

10/8/2013 1:59:07 AM #

christian t shirt logos

Hello there, I discovered your blog by the use of Google whilst looking for a related matter, your website came up, it seems to be great. I've bookmarked it in my google bookmarks.
Hi there, simply changed into aware of your weblog via Google, and found that it is truly informative. I am gonna watch out for brussels. I'll be grateful in the event you proceed this in future. Many people will be benefited from your writing. Cheers!

Here is my blog -  christian t shirt logos - wiki.tau.ac.il/.../America_And_Antichrist

christian t shirt logos

10/8/2013 5:36:21 AM #

christian t shirt sayings

Way cool! Some extremely valid points! I appreciate you writing this article plus the rest of the site is really good.

My web blog ...  christian t shirt sayings - www.theinformationcouncil.com/.../index.php

christian t shirt sayings

10/8/2013 6:32:40 AM #

christian t shirts designs

It's awesome designed for me to have a web page, which is helpful designed for my knowledge. thanks admin

my blog post -  christian t shirts designs - adelamoraru.ro/centrul-de-consiliere-pentru-parin%C8%9Bi-la-un-an-de-activitate

christian t shirts designs

10/8/2013 7:22:53 AM #

funniest christian quotes

Excellent post. I was checking continuously this blog and I am impressed! Very helpful information specially the last part Smile I care for such information a lot. I was seeking this certain info for a very long time. Thank you and good luck.

Here is my site -  funniest christian quotes - www.club-psi.ru/w/What_Is_Antichrist_I_John_2

funniest christian quotes

10/8/2013 7:31:46 AM #

funny jokes christian

Aw, this was an incredibly good post. Spending some time and actual effort to make a top notch article… but what can I say… I procrastinate a whole lot and don't manage to get anything done.

Here is my weblog ...  funny jokes christian - http://www.lucysnap.co.kr/?document_srl=5244

funny jokes christian

10/8/2013 10:28:47 AM #

lyrics for the antichrist

Thank you for sharing your thoughts. I truly appreciate your efforts and I will be waiting for your next write ups thanks once again.

my homepage ...  lyrics for the antichrist - www.allygruenerphotography.com/31-the-different-aspects-of-public-health-programs

lyrics for the antichrist

10/8/2013 12:18:42 PM #

sons of god

This paragraph presents clear idea for the new people of blogging, that genuinely how to do running a blog.

My web site;  sons of god - wiki.operationfurball.ramsaysmith.com/index.php:FredrickHeidelb

sons of god

10/9/2013 7:47:46 PM #

solar panels

Here is an example, in the event that you decide that you'd like a solar photovoltaic (PV) system that generates somewhere around 300 kWh monthly that is 3,600 kWh per annum.

Also visit my site ::  solar panels - http://www.dhonishow.de/node/18682

solar panels

10/9/2013 8:20:33 PM #

solar panels

In case you are you currently thinking about installing  solar panels - khabarazto.com/index.php  for your home, but have been discouraged because the cost of a solar energy system happens to end up being way too huge.

solar panels

10/10/2013 7:34:48 AM #

solar panels

This applies to all solar panel purchases, but especially for the purchases that might bring a government refund. The certification on  solar panels - http://www.farabella.es/en/foro/solar-panels-10  indicates the type of screening that's been completed on them.

solar panels

10/15/2013 1:14:50 PM #

nopro.boulderkoreanchurch.org

Hi there I am so delighted I found your weblog, I really found you by mistake, while I was looking on Yahoo for something else, Regardless I am here now and would just like to say thanks a lot for a remarkable post and a all round entertaining blog (I also love the theme/design), I don't have time to browse it all at the moment but I have bookmarked it and also included your RSS feeds, so when I have time I will be back to read more, Please do keep up the great work.|

Here is my web page ... pit 2013 program,  nopro.boulderkoreanchurch.org - nopro.boulderkoreanchurch.org/.../ ,

nopro.boulderkoreanchurch.org

10/15/2013 5:55:36 PM #

druk pit 2

I am truly thankful to the owner of this web site who has shared this impressive piece of writing at here.|

Here is my site ...  druk pit 2 - itarat.net/blogs/19652/36565/program-pit-2014

druk pit 2

10/28/2013 8:01:42 AM #

Roseann

Good information. Lucky me I found your website by accident (stumbleupon). I have book-marked it for later!

my website: rosy [ Roseann - http://hiblowhp80.wordpress.com/septic-tank-blog/ ]

Roseann

10/30/2013 4:59:58 PM #

http://visualimpactreviews.tumblr.com

Greetings! Very helpful advice within this article! It is the little changes that make the largest changes. Thanks for sharing!

my weblog :: Is Visual Impact Muscle Building a Scam ( http://visualimpactreviews.tumblr.com - http://visualimpactreviews.tumblr.com )

http://visualimpactreviews.tumblr.com

11/12/2013 1:48:09 PM #

Horacio

I was recommended this blog via my cousin. I am now not positive whether or not this put up is written by way of him as no one else understand such particular approximately my difficulty. You're amazing! Thank you!

Also visit my webpage - Capture His Heart,  Horacio - http://ReviewCaptureHisHeart.blogspot.com ,

Horacio

11/13/2013 8:18:01 PM #

http://myrtlebeachmastermind.com/groups/a-handful-of-queries-to-raise-a-quick-a-to-z-on-straightforward-strategies-of-motor-trade-insurance-motortradeinsurance-blog-co-uk/members

These good-time girls are contrasted to a group of morose Australian sheep station blokes missing out on cheaper  %anchor-text% - myrtlebeachmastermind.com/.../  only available to women. But in general, for young drivers are 2, 977 for a male aged 17-22 at £3, 163, or £1, 799 for a female of the same age.

http://myrtlebeachmastermind.com/groups/a-handful-of-queries-to-raise-a-quick-a-to-z-on-straightforward-strategies-of-motor-trade-insurance-motortradeinsurance-blog-co-uk/members

11/13/2013 8:48:40 PM #

????? seo

This is really interesting, You're a very skilled blogger. I have joined your rss feed and look forward to seeking more of your fantastic post. Also, I have shared your website in my social networks!

Also visit my web blog;  ????? seo - http://www.seofrontpages.com

????? seo

11/14/2013 1:31:02 AM #

expert HTML5 / CSS3 developer

My programmer is trying to convince me to move to .net from PHP. I have always disliked the idea because of the costs. But he's tryiong none the less. I've been using WordPress on various websites for about a year and am nervous about switching to another platform. I have heard great things about blogengine.net. Is there a way I can transfer all my wordpress posts into it? Any kind of help would be really appreciated!

Feel free to surf to my web blog:  expert HTML5 / CSS3 developer - www.5cubecommerce.com/...html5-css3-developer.html

expert HTML5 / CSS3 developer

11/14/2013 1:46:45 AM #

design a Menu Card

Hey! I realize this is kind of off-topic however I needed to ask. Does managing a well-established blog like yours take a massive amount work? I am brand new to writing a blog however I do write in my journal everyday. I'd like to start a blog so I will be able to share my own experience and thoughts online. Please let me know if you have any recommendations or tips for brand new aspiring blog owners. Appreciate it!

Stop by my homepage ...  design a Menu Card - http://www.5cubecommerce.com/menucard-design.html

design a Menu Card

11/14/2013 5:57:32 PM #

http://www.loganrobot.com

He did not have a wait staff invested in customer service this taxi insurance ( http://www.loganrobot.com - http://www.loganrobot.com/?q=node/1552815 ) summer. Pricing is based on zones within the city and the city as a whole. She was sent home in a taxi two minutes after coming out of it or there's just so much wallpaper.

http://www.loganrobot.com

11/15/2013 8:19:08 AM #

http://www.litparapluiepascher.net/

Ahaa, its fastidious conversation regarding this paragraph at this place at this blog, I have read all that, so now me also commenting at this place.

Feel free to visit my page :: lit parapluie pas cher ( http://www.litparapluiepascher.net/ - http://www.litparapluiepascher.net/ )

http://www.litparapluiepascher.net/

11/22/2013 2:50:11 PM #

muscle builder

Why visitors still make use of to read news papers when in this technological world all is presented on web?

my web site:  muscle builder - www.fascinatedwithsoftware.com/.../...-object.aspx

muscle builder

11/23/2013 4:46:00 PM #

montre festina homme prix

I'm extremely impressed along with your writing abilities and also with the layout to your blog. Is this a paid subject or did you customize it yourself? Either way keep up the excellent high quality writing, it's rare to see a nice blog like this one today..

Here is my website -  montre festina homme prix - http://www.montrefestinahomme.com/

montre festina homme prix

11/27/2013 4:33:53 PM #

bluetooth headphones

Hi, I think your site might be having browser compatibility issues. When I look at your website in Ie, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, wonderful blog!

Also visit my weblog ::  bluetooth headphones - http://www.bluetoothheadphonesreviewer.com/

bluetooth headphones

11/30/2013 7:39:40 PM #

Magento shopping cart

Touche. Great arguments. Keep up the good work.

Visit my web blog  Magento shopping cart - www.5cubecommerce.com/ecommerce-seo-package.html

Magento shopping cart

12/8/2013 6:54:30 AM #

www.picoprojecteur.org

It's a pity you don't have a donate button! I'd certainly donate to this fantastic blog! I guess for now i'll settle for book-marking and adding your RSS feed to my Google account. I look forward to new updates and will talk about this site with my Facebook group. Talk soon!

My website; pico projecteur ( www.picoprojecteur.org - http://www.picoprojecteur.org/ )

www.picoprojecteur.org

12/8/2013 10:50:08 AM #

offsite backup solutions

A laptops and wireless devices hotel chain or group reservations database for instance holds all client data, often billing information and daily basic operational information. However, with sufficient training, testing, and refining, the data recovery planning process to ensure that all aspects needed for the emergency data recovery Pittsburgh. Without their data, many organizations laptops and wireless devices would lose an invaluable amount of research and employee work.

my blog  offsite backup solutions - www.njserenityspa.com/xe/?document_srl=4381912

offsite backup solutions

12/9/2013 10:54:52 AM #

????? ??????? ??? ???

????? ??????? ??? ??? - www.librairie-medievale.com/img/babari.php?43  
It is perfect time to make a few plans for the longer term and it is time to be happy. I've read this post and if I may I wish to counsel you few fascinating issues or advice. Perhaps you can write next articles regarding this article. I desire to read more issues approximately it! %link\

????? ??????? ??? ???

12/9/2013 9:15:34 PM #

??? ??? ????

??? ??? ???? - http://www.kanonista.eu/log/kuroe/kuroe.php?541  Hello my loved one! I want to say that this post is amazing, nice written and come with approximately all important infos. I'd like to peer more posts like this .  ??? ??? ???? - http://www.kanonista.eu/log/kuroe/kuroe.php?541

??? ??? ????

12/9/2013 10:09:56 PM #

?????? ?? ??

?????? ?? ?? - www.jeffersonvilleuez.com/js/ruiviton.php?468  Having read this I thought it was really informative. I appreciate you spending some time and effort to put this short article together. I once again find myself spending a significant amount of time both reading and commenting. But so what, it was still worth it!  ?????? ?? ?? - www.jeffersonvilleuez.com/js/ruiviton.php?468

?????? ?? ??

12/10/2013 3:47:04 AM #

?????? ?? ???

?????? ?? ??? - www.aviobiletesonline.lv/images/myuumyuu.php?219  Good day! This post could not be written any better! Reading this post reminds me of my good old room mate! He always kept talking about this. I will forward this article to him. Fairly certain he will have a good read. Thanks for sharing!  ?????? ?? ??? - www.aviobiletesonline.lv/images/myuumyuu.php?219

?????? ?? ???

12/11/2013 2:55:03 AM #

Natural Garcinia Burn And Coffee Cleanse Max

At this time I am ready to do my breakfast, after having my breakfast coming again to read further news.

my web site  Natural Garcinia Burn And Coffee Cleanse Max - http://corrosivegames.net/wiki/index.php/User_talk:SherryHeighway

Natural Garcinia Burn And Coffee Cleanse Max

12/11/2013 10:20:12 AM #

homepage

Simply wish to say your article is as amazing. The clarity in your publish is just excellent and i can suppose you are knowledgeable on this subject. Fine together with your permission let me to grab your RSS feed to keep updated with forthcoming post. Thanks a million and please continue the enjoyable work.

My page ::  homepage - http://jabjaab.com/user/view/voted/login/leannewnd

homepage

12/11/2013 4:51:04 PM #

??? ??? ??? ??

??? ??? ??? ?? - http://www.zivelahrana.com/carica/purada.php?165  I??m not that much of a internet reader to be honest but your blogs really nice, keep it up! I'll go ahead and bookmark your site to come back down the road. Cheers  ??? ??? ??? ?? - http://www.zivelahrana.com/carica/purada.php?165

??? ??? ??? ??

12/13/2013 9:33:14 AM #

anti aging skin care reviews

Incredible quest there. What happened after? Thanks!

Also visit my web blog;  anti aging skin care reviews - www.serialkillers.net/.../biogeniste-skin-care

anti aging skin care reviews

12/13/2013 12:03:59 PM #

wiki.fetishartindexer.org

Fantastic website. Plenty of helpful information here. I am sending it to some pals ans also sharing in delicious. And certainly, thank you to your sweat!

Also visit my web site - centro de matronas AMANE [ wiki.fetishartindexer.org - wiki.fetishartindexer.org/El_Mal_Uso_Del_Whatsapp_Engancha_Y_Deja_Rastros_Dif%C3%ADciles_De_Borrar ]

wiki.fetishartindexer.org

12/13/2013 1:44:06 PM #

diamond core drills

I'm not sure where you are getting your info, but good topic. I needs to spend some time learning more or understanding more. Thanks for great information I was looking for this information for my mission.

My blog post;  diamond core drills - community.ss-rajamouli.com/.../how-to-assist-stop-wrinkles

diamond core drills

12/13/2013 2:12:51 PM #

homepage

Great post! We will be linking to this particularly great post on our website. Keep up the good writing.

My web site -  homepage - http://www.gists.ng/LatonyaVcj

homepage

12/14/2013 1:33:43 AM #

???? ??? ???

???? ??? ??? - www.prospectiva.com/newsletter/erumesu.php?470  Appreciate this post. Let me try it out.  ???? ??? ??? - www.prospectiva.com/newsletter/erumesu.php?470

???? ??? ???

12/14/2013 2:22:03 PM #

does pure garcinia cambogia work

I think this is among the most important info for me. And i'm glad reading your article. But want to remark on few general things, The site style is wonderful, the articles is really great : D. Good job, cheers

Also visit my blog:  does pure garcinia cambogia work - successpenpal.com/.../

does pure garcinia cambogia work

12/15/2013 4:24:34 AM #

gucci ??? ??? ??

gucci ??? ??? ?? - http://www.antos.it/adocs/gucchi.php?1177  This is a topic that is near to my heart... Cheers! Where are your contact details though?  gucci ??? ??? ?? - http://www.antos.it/adocs/gucchi.php?1177

gucci ??? ??? ??

12/16/2013 11:57:52 AM #

dinerito fresco

El territorio valenciano está dividido en 36 partidos judiciales Provincias.

my web blog ::  dinerito fresco - archi.ssu.ac.kr/

dinerito fresco

12/17/2013 8:37:12 PM #

?? ??? ???

?? ??? ??? - http://www.zivelahrana.com/carica/purada.php?617  Thank you for another informative site. Where else may I am getting that kind of info written in such an ideal way? I have a undertaking that I'm just now running on, and I've been on the look out for such information.  ?? ??? ??? - http://www.zivelahrana.com/carica/purada.php?617

?? ??? ???

12/20/2013 9:55:29 AM #

referencer un site

I have been exploring for a bit for any high quality articles or weblog posts on this sort of house . Exploring in Yahoo I at last stumbled upon this website. Reading this info So i am happy to exhibit that I have an incredibly good uncanny feeling I came upon just what I needed. I most unquestionably will make certain to don?t overlook this website and give it a glance on a relentless basis.

Also visit my page ...  referencer un site - ringsaker.hedmark.org/.../Search_Motor_Optimization:_How_To_Drive_Web_site_Visitors_To_You

referencer un site

12/21/2013 2:07:29 AM #

bleacherreport.com

Why people still make use of to read news papers when in this technological globe the whole thing is accessible on web?

Take a look at my web page:  bleacherreport.com - https://flattr.com/profile/suzetteoldham

bleacherreport.com

12/21/2013 2:07:35 PM #

payday loans for people with benefits

Hi my friend! I want to say that this article is awesome, great written and include almost all significant infos. I'd like to look more posts like this .

Feel free to surf to my web page:  payday loans for people with benefits - http://24hloansonbenefits.co.uk/

payday loans for people with benefits

12/22/2013 3:29:07 AM #

super real

If you enjoyed reading this article by Jeff Schuman make sure to visit our bad credit loans help website today  super real - http://www.moopzoopfever.com  this is often a short-term money advance built to meet your emergency financial needs.

super real

12/23/2013 5:28:07 PM #

medium.com

With regard to the blogging manager, could I ask how does one manage junk posts? I'm sure pleased to invest mainly for tips to be able to manage it!

Feel free to visit my page: Moles Warts and Skin Tags Removal ( medium.com - medium.com/.../80a2e56ea414 )

medium.com

12/23/2013 6:31:53 PM #

??? ??? ?????

Does your blog have a contact page? I'm having problems locating it but, I'd like to shoot you an e-mail. I've got some creative ideas for your blog you might be interested in hearing. Either way, great site and I look forward to seeing it expand over time.

Here is my page -  ??? ??? ????? - http://makesilverjewelry.com/hyhrgx.html

??? ??? ?????

12/24/2013 6:13:12 AM #

la loter&#237;a del mill&#243;n

This web site really has all of the information and facts I needed about this subject and didn't know who to ask.

Here is my webpage:  la lotería del millón - help.flexilio.com/.../32195546-Acrecentamiento-De-Medio-Million-Respecto-De-Espa%C3%B1oles-Son-Adictos-A-Su-Juego

la lotería del millón

1/1/2014 4:09:29 PM #

Salvatore

If you forgot a snack or drink you can always grab them here. Sarah Palin debate that takes the effect of such shows on modern society on a much deeper context. Specifically, the fourth Thursday of November was instituted by Abraham Lincoln in the year 1863 as the Thanksgiving holiday [ Salvatore - www.montgopalife.com/xe/?document_srl=1136695 ] of United States.

Salvatore

1/2/2014 1:37:01 PM #

Nutra green coffee review

Everything is very open with a very clear clarification of the challenges. It was truly informative. Your site is very useful. Many thanks for sharing!

Feel free to surf to my blog ...  Nutra green coffee review - http://www.mokichi.com/bbs/nikki/nikki.html

Nutra green coffee review

1/10/2014 9:32:50 AM #

click here for more

Thank you a bunch for sharing this with all people you really understand what you are talking approximately! Bookmarked. Kindly also discuss with my web site =). We could have a hyperlink alternate contract between us

Take a look at my site ::  click here for more - http://www.parkinglotniskowroclaw.Biz.pl/

click here for more

1/17/2014 7:02:53 PM #

koenzym q10 dzialanie

koenzym q10 wystepowanie. What I Consider Right Anti Aging Face Cream

Feel free to surf to my page ::  koenzym q10 dzialanie - http://koenzymq10.zatokakobiet.pl/

koenzym q10 dzialanie

1/21/2014 5:58:29 PM #

franking machines

Operating without it can hamper your business as your mails will never be brought to your recipients.

My site ...  franking machines - www.megast.eb2a.com/.../entry.php

franking machines

1/22/2014 2:30:06 PM #

franking machine

High volume Franking Devices include; E581 Sending Base.

Also visit my web page;  franking machine - illuminatamag.com/.../

franking machine

1/23/2014 9:02:57 AM #

gramatyka angielska chomikuj

Inquiry Based Learning And Language Teaching and nauka angielskiego za darmo. Inquiry Based Learning And Language Teaching

my site;  gramatyka angielska chomikuj - http://www.24ang.pl/temat/gramatykaangielska/

gramatyka angielska chomikuj

1/24/2014 12:10:07 PM #

freesolarpanels

The roof must also get rid heavy shadiness.

Also visit my web site ::  freesolarpanels - http://streambly.com.au/node/add/forum

freesolarpanels

1/26/2014 1:21:34 PM #

freesolarpanels

The charge for installing would depend on the area the solar power panels will soon be set.

Feel free to visit my page  freesolarpanels - http://www.skindermolaser.it/skindermo/node/369340

freesolarpanels

1/26/2014 6:52:35 PM #

free solar panels

A special manufacturing process which is known as "thin film deposit" makes them flexible.

My web-site ...  free solar panels - http://uvodoucha.pivovarkostelec.cz/node/548

free solar panels

2/11/2014 4:40:13 PM #

solar panels

Likewise if there is small number of ice on a Solar PV panel, light nonetheless gets right through to heat the cell and dissolve the frost.

My site ::  solar panels - bonyadmahdi.org/.../member.php

solar panels

2/11/2014 5:22:22 PM #

solar panels

The generation of electricity through solar photovoltaic sections occurs on sunlit days together with cloudy days.

Feel free to surf to my blog -  solar panels - http://bbangpe.com/30971

solar panels

2/11/2014 5:42:32 PM #

solar panels

It may be set up in almost any way on our top as per your wants to create enough of electricity in the sun light.

Feel free to surf to my blog ::  solar panels - esfera.mobi/.../renewable-energy-expense-why-can-i-select-solar-power-systems-can-i-get-financial-backing

solar panels

2/11/2014 9:11:13 PM #

solarpanels

The very first thing to understand about Solar PV Sections is they do not desire a popular bright day-to produce electricity.

Feel free to visit my web-site:  solarpanels - lekiosqueafleurs.com/alternative-energy-investment-why-can-i-pick-solar-panels-may-i-get-financial-backing

solarpanels

2/16/2014 7:11:27 PM #

biomass boilers

Currently,  biomass boilers - www.global-changemakers.net/.../2140037  will be THE engineering to get in.

biomass boilers

2/24/2014 8:26:29 AM #

boca raton locksmith

Living alone could be an exciting new experience for any individual. Living by your individual guidelines slightly than following someone else's desires and routines can truly feel liberating, but it surely also comes with some important security concerns. Particularly if you're a girl, living alone requires extra precautions in order to keep safe. In an effort to decrease security threats, girls living alone ought to follow these basic safety ideas:
First, don't advertise that you reside alone. Be sensible about the data you give out to the general consumer. Keep away from making unnecessary feedback about your living situation to anybody, such as the cashier on the grocery retailer it's tough new acquaintance you've met in any setting. Your mailbox should say only a primary initial and final name; the identical goes for avoiding identifying info upon your answering machine. Take care of the curtains closed. A wide open window giving view to a lady who is consistently alone will mean that you are appear to often be a simple target.
Call in for security checks. Does your mother nonetheless say "call me once you get home" anytime you her home? Have you ever comply with throughout? If not, you must! The identical goes for events when you're heading to a date, into the bar, or anyplace else alone, particularly at night. Even though you do not have a roommate, you can test in with friends. At year 'round make sure certain friend or family member is aware of where you might be at night if you plan for home. Start this habit now to ensure someone will discover http://locksmithbocaraton.biz  in the event you do not come home when planned. When have got different friends who dwell alone, provide to do exactly the same for them.
Do not let strangers into your property for any reasons. Should you should call a plumber or repairman, have somebody come over so you're not on it's own. By no means let strangers in in the event that they arrive unannounced, even when they appear to possess a extremely good purpose. Even opening the door to say 'no' can be a dangerous threat of your own home safety, as they will simply overpower you and pressure their way inside.
Protect your self and your home with security devices such as door and window alarms and pepper spray. These easy alarms will deliver you with a warning to anybody making an effort to come way back in your home, whereas pepper spray will reduce your associated with turning into a victim of bodily assault. Each woman ought to have these tools at her disposal, no matter if living alone or with others.
Date carefully. Never give out individual home address to somebody you've got simply met; instead, organize to fulfill them in a public place, like a restaurant or coffee house. If possible, have a friend tag along; for the very least, let someone know the place you're going and who you are meeting.
Be cautious considerably common areas for the apartment complex. Gyms, mail rooms, parking lots, and laundry rooms could be comparatively deserted, particularly at night, and are therefore often targeted by thieves and different criminals. Talk to the building managers if these areas aren't well lit, and all the time please note of your environment when there. Never let strangers within the condo building, and prevent fumbling with your keys by it.

My webpage -  boca raton locksmith - http://youtu.be/3S8w3c4SAmU

boca raton locksmith

2/27/2014 7:11:15 PM #

premium garcinia cambogia

you're truly a good webmaster. The web site loading speed is amazing. It kind of feels that you're doing any unique trick. Moreover, The contents are masterpiece. you have done a wonderful process on this subject!

Look at my web page -  premium garcinia cambogia - http://platformarcade.com/profile/wilsonconn

premium garcinia cambogia

3/2/2014 7:26:36 PM #

spielberg-double.com

Unlike banking, these decisions don't rely on debtors having an excellent credit rating.

my web blog :: uk payday loans ( spielberg-double.com - http://spielberg-double.com/example.php )

spielberg-double.com

3/4/2014 5:39:18 PM #

SEO guide

I know this if off topic but I'm looking into starting my own weblog and was wondering what all is needed to get set up? I'm assuming having a blog like yours would cost a pretty penny? I'm not very web savvy so I'm not 100% sure. Any tips or advice would be greatly appreciated. Kudos

Here is my web page:  SEO guide - https://www.seoclerks.com

SEO guide

3/8/2014 2:46:54 AM #

pity 2014 program



My webpage  pity 2014 program - http://nowyprogrampity.eu

pity 2014 program

3/22/2014 4:28:56 PM #

??? ???? ???????

Right here is the right site for everyone who wishes to understand this topic. You realize a whole lot its almost hard to argue with you (not that I personally would want to…HaHa). You certainly put a brand new spin on a topic that has been discussed for years. Excellent stuff, just excellent!

Feel free to surf to my blog;  ??? ???? ??????? - http://saka.dahek.net/t11-topic

??? ???? ??????? United States

3/22/2014 4:53:15 PM #

Muscle Strain Treatment

I every time spent my half an hour to read this webpage's content every day along with a mug of coffee.

Also visit my web site;  Muscle Strain Treatment - http://fatloss4ever.com/muscle-strain-treatment/

Muscle Strain Treatment United States

3/22/2014 6:35:53 PM #

????? ??????

When some one searches for his vital thing, thus he/she desires to be available that in detail, so that thing is maintained over here.

My web page  ????? ?????? - http://akhbarelahly.com

????? ?????? United States

3/22/2014 7:05:29 PM #

shaolin kung fu

Hello There. I found your blog using msn. This is an extremely well written article. I will be sure to bookmark it and return to read more of your useful information. Thanks for the post. I'll certainly comeback.

My web blog:  shaolin kung fu - http://www.learn-shaolin.com

shaolin kung fu United States

3/26/2014 9:17:22 PM #

Gregorio

Appreciation to my father who informed me regarding this blog, this website is truly remarkable.

Here is my web page :: nhongxichcongnghiep.com ( Gregorio - http://www.nhongxichcongnghiep.com/?p=157 )

Gregorio United States

4/14/2014 9:28:34 AM #

reviews for garcinia cambogia extract

Article Source:  Gardens is an expert at Weight Loss tips like how to use Garcinia Cambogia for Weight Loss. I'm in my 5th week now and it is very apparent that it is working. As a side-note, Mike  mentions that there seems to be an added health benefit to taking this Garcinia Cambogia - which is that the arthritis in his back seems  a lot better.

Here is my web site -  reviews for garcinia cambogia extract - nichipin.mine.nu/.../

reviews for garcinia cambogia extract United States

Pingbacks and trackbacks (1)+

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading