This is a very old question, and this answer should be a comment rather than an answer, but I think this is a topic worth continuing to talk about, and this answer is too long to be a comment.
The initial “fluency” thinking seemed to be mainly about adding strength and flexibility (a chain of methods, etc.) to objects, making the code more understandable.
for example
Company a = new Company("Calamaz Holding Corp"); Person p = new Person("Clapper", 113, 24, "Frank"); Company c = new Company(a, 'Floridex', p, 1973);
less fluent than
Company c = new Company().Set .Name("Floridex"); .Manager( new Person().Set.FirstName("Frank").LastName("Clapper").Awards(24) ) .YearFounded(1973) .ParentCompany( new Company().Set.Name("Calamaz Holding Corp") ) ;
But for me, the later version is actually not more powerful or flexible than
Company c = new Company(){ Name = "Floridex", Manager = new Person(){ FirstName="Frank", LastName="Clapper", Awards=24 }, YearFounded = 1973, ParentCompany = new Company(){ Name="Calamaz Holding Corp." } };
..in fact, I would call this latest version easier to create, read and maintain than the previous one, and I would say that it requires significantly less luggage behind the scenes. Which is important to me for at least two reasons:
1 - The cost associated with creating and maintaining layers of objects (regardless of who does it) is as real, relevant and important as the costs associated with creating and maintaining a code that consumes them.
2 - Code overlay built into object layers creates as many (if not more) problems as code swelling in code that consumes these objects.
Using the latest version means that you can add a (potentially useful) property to a company class simply by adding one, very simple line of code.
Not to say that I do not feel that there is no place for a chain of methods. I really like being able to do things like (in JavaScript)
var _this = this; Ajax.Call({ url: '/service/getproduct', parameters: {productId: productId}, ) .Done( function(product){ _this.showProduct(product); } ) .Fail( function(error){ _this.presentError(error); } );
.. where (in the hypothetical case that I present) Done and Fail were additions to the original Ajax object and were added without changing any source Ajax object code or any existing code that made use of the original Ajax object and without creating disposable things, which were exceptions to the general organization of the code.
So, I definitely found value when creating a subset of the functions of the object that returns the 'this' object. In fact, whenever I have a function that would otherwise return a void, I believe that it returns this.
But I have not yet found significant value when adding a "free interface" (.eg "Set") to the object, although theoretically it seems that there may be some kind of organization similar to the namespace, which may arise from the practice of this, which may be appropriate . ("Set" may not be particularly valuable, but "Command", "Query" and "Transfer" can, if it helps to organize things, alleviate and minimize the impact of additions and changes.) One of the potential benefits of this practice, depending on As this was done, there could be an improvement in the typical level of the encoder and attention to security levels - the lack of which undoubtedly caused a large amount of sadness.