CatZMedlem sedan jan. 20022 440 inlägg Kan man göra en modulbaserad sida så att man enkelt kan byta olika moduler mot varandra utan att det påverkar kärnan av applikationen? Hur skulle det i så fall kunna se ut?
Låt os säga att en sida har 3 olika avdelningar 1, 2 och 3 till 1 skulle jag då vilja kunan välja modul a eller b. På sida 2 skulle jag vilja kunna välja modul c, d eller e osv.
Hur kan man göra det "enkelt"? :stud
Kika lite på reflection så hittar du nog det du söker :)
PaceMedlem sedan juni 20019 024 inlägg Det går inte att göra "enkelt". Däremot är det inte speciellt svårt i .NET tack och lov. I grunden är det Reflection du ska titta på. Jag har exempelvis gjort så här:
- Skapa ett Interface som varje plugin måste implementera.
- I ditt Interface, lägg in metoder som ska köras vid speciella händelser (exempelvis "OnPageLoad" som är självbeskrivande).
Exempel:
public interface IPlugin
{
public void OnPageLoad(object Meta)
}
public class HelloWorld : IPlugin
{
public void OnPageLoad(object Meta)
{
Console.WriteLine(Meta.Foo);
}
}
Därefter skapar du själva kärnan som "laddar" alla plugin. Det är här den svåra biten sitter, allt ovan fungerar som metadata vilket gör det extremt enkelt att lägga till en plugin. ASP Alliance har en lätt artikel som heter Plug In Application Using Reflection. Det finns mer på Google, sök på .NET reflection plugin så får du mängder med tips.
Så här gör du laddaren i stora drag:
- Skapa en klass som letar igenom förutbestämda assemblies eller alla efter klasser som implementerar IPlugin.
- På bestämda platser i din applikation, så kallade hooks, kör alla plugin för en viss metod, exempelvis OnPageLoad().
- Laddaren hittar HelloWorld.OnPageLoad() och startar metoden dynamiskt. Med hjälp av parametern "Meta" kan du ta emot data från kärnapplikationen, vilket man ofta behöver. Dessutom kan man behöva returnera data.
- Laddaren går vidare med nästa IPlugin tills de tar slut.
CatZMedlem sedan jan. 20022 440 inlägg Kalasbra tips Pace! Jag markerar det som löst och återkommer med lite mer specifika frågor när jag utvecklar.
eriksMedlem sedan apr. 20011 418 inlägg Varför vill man göra en modulbaserad sida? (Jag kan ingen .net alls, men förklara gärna med ett exempel eller en länk dit det används)
CatZMedlem sedan jan. 20022 440 inlägg http://www.facebook.com är en modulbaserad sida. Det är en otäckt bra affärsidé, jag önskar jag kommit på den.
eriksMedlem sedan apr. 20011 418 inlägg Ok, vad gör den modulbaserad? Är det de äckliga applikationerna som folk tycker man ska joina hela tiden?
Mvh Erik
PaceMedlem sedan juni 20019 024 inlägg Jämför rymdstationen ISS. Den är uppbyggd med en "kärna" som innehåller alla basala funktioner såsom sovkapsel, toalett, utrymme för mat och kontroll över färjan.
Därefter kan man lägga till moduler efter hand som behövs; forskning, test av viktlöshet, underhållsmoduler med mera. Det som gör att enheterna hänger ihop är kapslarnas sammanfogning (dess standarder i abstrakt mening).
Ur användarens synpunkt kan denne installera de moduler som är av intresse, i stället för en gigantiskt applikation som gör allt (med alla problem det innebär i form av prestanda, minskad användbarhet etc). Det går även utmärkt att lägga till en modul själv så länge det finns en standard dokumenterad. Med andra ord flexibilitet.
Se även http://sv.wikipedia.org/wiki/Insticksprogram
CatZMedlem sedan jan. 20022 440 inlägg I mitt fall så var det mer att jag har olika webbaserade applikationer som är ungefär samma fast utformade för två olika kundtyper. Jag vill kunna ha samma kärna i botten och sedan ladda vilken modul som nu den kunden ska ha för att slippa ha en miljon olika applikationer och databaser.
Väldigt smidigt framförallt i minskad tid som går åt till support om man gör det rätt. Jag är inte där än men så småningom ska jag kunna byta moduler i ett enkelt administrationsgränssnitt. Kunden kanske till och med själv kan tillåtas byta moduler.
eriksMedlem sedan apr. 20011 418 inlägg Intressant... Jag har faktiskt läst en kurs om modularitet i fysiska produkter. Där nämndes slot modulär (varje gränsnitt är annorlunda, jfr en dator, det går inte att stoppa in en CD-skiva i USB-porten), bus-modulär (alla gränsnitt är av samma typ, alltså om man hade gjort så att alla uttag hade varit usb, så att alla olika enheter är samma) och sektions-modulär, vilket är att det inte finns en huvudenhet utan att alla enheter kan kopplas till alla (jfr seriemonterade rör).
Med beskrivningarna ovan, kan ni komma på någon sektionsmodulär hemsdia? Alltså en sida utan kärna? Hör inte till vanligheterna men kanske skulle kunna vara intressant!?(CatZ, om du tycker att detta går för OT så ska jag redigera bort mitt inlägg).
PaceMedlem sedan juni 20019 024 inlägg Nja, hela internet är ju distribuerat över mängder av olika system och plattformar så jag tror inte det finns någon sektionsmodulär webbplats i den bemärkelsen. Däremot finns xml och webbtjänster för att överbygga dessa skillnader. Det fungerar som lim och håller ihop alla enheter. Nästan. :)