Currently I am trying to get this partially done via dynamic actions, but I'd want to hear more about this, hammett :) !
On Mon, Feb 22, 2010 at 5:41 PM, Alex Henderson <[email protected]>wrote: > I'd love to see a blog post on this... I'm treading similar water > developing extensible applications in monorail. I might start blogging > about my experiences soon, just so I can get some feedback on our current > approach and ways to improve it (especially around MEF + IOC Container, and > approaches for handling disabling/removing plugins are runtime - something > we currently do have working, but it's not pretty). > > Cheers, > > - Alex > > > On Tue, Feb 23, 2010 at 7:22 AM, hammett <[email protected]> wrote: > >> It's a complicated problem. I can see a few ways to solve. but the >> price is increased complexity. Will try to cover this in a blog post >> given that the topic is open ended extensibility.. >> >> On Mon, Feb 22, 2010 at 8:44 AM, Jan Limpens <[email protected]> >> wrote: >> > Hello! >> > >> > I have an administrative interface done in MR for a single client doing >> all >> > kind of crud and more operations using explicit services and or explicit >> or >> > implicit Daos (IArticleDao and IDao<Article, long>) resolved from >> Windsor. >> > >> > Now this project has grown and I will have to make this application >> > extensible (and am breaking my head over how to attack this). Different >> > tenants will have different extensions to the base domain. For instance >> a >> > customer who sells cakes will need different properties on their Article >> > implementation than customer who will sell toys. Domain and NHibernate >> wise >> > I think I've got this handled. >> > >> > From what I see I will have to take care of the full implementation of a >> > certain feature crossing typical layers. So one new feature concerning >> one >> > or a set of changes to the domain model should take care of >> > >> > View and view logic in JavaScript and brail >> > Controller extensions to the base Controller >> > Service extensions... >> > >> > in the form of one dll - in the ideal case - dropping it in a certain >> place >> > should autowire it somehow, but this can wait. >> > >> > What I really am concerned about are the extension points I can provide >> from >> > the administrative interface. >> > >> > A simple case: >> > >> > [return: JSONReturnBinder] >> > [Transaction(TransactionMode.Requires)] >> > public virtual IList<SimpleArticle> FullTextSearchAsJson(string >> > fragment, int categoryId, int productGroupId, string orderBy, >> > >> > SortDirection direction, int maxResults, bool isActive, decimal from, >> > decimal to) >> > { >> > Func<Product, object> func = null; >> > switch (orderBy.ToLowerInvariant()) >> > { >> > case "name": >> > func = (x => x.Name); >> > break; >> > case "id": >> > func = (x => x.Id); >> > break; >> > } >> > var priceRange = new PriceRange(from, to - from); >> > >> > var articles = articleDao.Find(fragment, categoryId, >> > productGroupId, 0, func, direction, maxResults, 0, isActive, >> priceRange); >> > var result = articles == null ? null : new >> > List<Product>(articles); >> > if (result == null) return null; >> > var link = new LinkHelper(Context); >> > return result >> > .Select(article => new SimpleArticle(article.Id, >> > article.Name, >> > article.Key, >> > >> link.Article(article))) >> > .ToList(); >> > } >> > >> > now we extend the Article class with Properties string ISBN { get; set; >> } >> > and bool HasISBN { get; } and it becomes the BookArticle class. The >> above >> > method should also output those two fields. >> > >> > So to have code reuse, >> > >> > I'd probably refactor out the actual query part, >> > taking the dao as a parameter, >> > returns my new article sub class >> > and the I'd use an extended SimpleArticle to present my items. >> > luckily there is no real view involved, because I have absolutely no >> idea on >> > how to introduce code reuse in that area. I wished, my entities >> > automagically would create their forms for themselves, but this cannot >> work >> > for more complicated entities, I suppose. >> > >> > While all of this certainly is doable, it is very non-frameworkey and I >> hate >> > all the coupling this introduces. And the best bet for code reuse in the >> > view area for now is relying on the merge feature of my source control. >> > >> > Anyone wrote something clever about this? Or is inclined to pass me some >> > good pointers here and now? >> > >> > Thanks! >> > >> > -- >> > Jan >> > >> > -- >> > You received this message because you are subscribed to the Google >> Groups >> > "Castle Project Users" group. >> > To post to this group, send email to >> [email protected]. >> > To unsubscribe from this group, send email to >> > [email protected]<castle-project-users%[email protected]> >> . >> > For more options, visit this group at >> > http://groups.google.com/group/castle-project-users?hl=en. >> > >> >> >> >> -- >> Cheers, >> hammett >> http://hammett.castleproject.org/ >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Castle Project Users" group. >> To post to this group, send email to >> [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<castle-project-users%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/castle-project-users?hl=en. >> >> > -- > You received this message because you are subscribed to the Google Groups > "Castle Project Users" group. > To post to this group, send email to [email protected] > . > To unsubscribe from this group, send email to > [email protected]<castle-project-users%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/castle-project-users?hl=en. > -- Jan -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.
