Another set of annotations for the list:
31. Declarative – LINQ
LINQ allows a specific way to access collections. This access is via a query which is executed when needed. The common syntax can be interpreted via a provider. The actual behavior moves from the code into the provider, and designing objects for meaningful use in LINQ becomes imperative.
Dependency properties are a property bag – in short form a dictionary where items are placed in, accessed via, and tracked via the surrounding dependency object. This makes dependency objects far more powerful and flexible, particularly in the area of designers. Object design with libraries that use dependency properties (currently WPF and WF) must select which properties are dependency properties.
33. Dynamic languages(I’m weak on dynamic languages and am actually going to postpone this to let someone else jump in here. I anticipate many child implications of this. But, as we do not have dynamic languages on our desks today in mainstream .NET languages, this does not have an immediate impact)
The appearance of an object, the available properties, is determined partly by structure, and partly by the authorization roles of the current user. This must be considered in designing objects – both properties and available methods.
35. Unstructured data
As programmers we remain enamored with the structured data – relational data stored in the database, and other pre-structured data. But much of the important information in the world resides in unstructured data – text documents, html pages, email, IM histories, wikis, etc. This data is not tractable from an object point of view, but we must deal with it.
36. Generative programming
Generative programming is a general term for programming with an extra level of abstraction. It generally means programming via metadata. Historically, if the work was done at runtime, it was called an OR/M (Object Relational Modeling) tool and at design time a code generator – although that terminology is not consistently used.
37. Social networking
Applications don’t just involve data and bits, the success of an application may depend on how humans interact with each other through the software. This is fairly obvious in programs like IM and Linked In. It is also present in all voting applications and programs like the NetFlix ratings that depend on socially collected data.
Ajax splits code across client and server – some literally runs at each location. Designing objects to work well in this environment also complicates testing and maintenance, especially in an enterprise environment where proxy servers may be involved.
39. Reporting (filtering, authorization)
If objects are involved in reporting, additional demands for user-driven/configurable reporting become involved. A set of objects may exist solely for the purpose of testing. If they are not involved, then calculations are pushed back on to the data server, which may not be desirable.
In general agile results in a code as you go strategy to design as opposed to a lot of up front design. Supporting “You ain’t going to need it” (YAGNI) means developers are focused on the immediate problem, generally forgoing a broader perspective. Also, BDD, by its name and usage is a behavior focused, rather than data focused view of objects. Finally, certain agile methodologies are tied to certain design patters, specifically “model-view-controller” (MVC).