ASP.NET CMS - XML nebo SQL   zodpovězená otázka

ASP.NET WebForms, XML, Databáze

Zdravím. Dělám webové cms, a chtěl bych se zeptat, jestli by bylo lepší použít databázi nebo xml.

Už nad tím dlouho uvažuji. S xml to bude pro uživatele jednoduší při instalaci, nebude muset mít na serveru povolenou databázi,..

Ale proti tomu databáze je prostě databáze.

Prosím o radu

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tady to je dost individuální. Je potřeba si ujasnit jaký je předpokládaný objem dat, složitost struktury databáze, kolik uživatelů najednou bude přistupovat ke sdíleným datum, požadavek na sdílní dat mezi uživateli a podobně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

NO, zatím by to mělo být jenom něco jednoduššího, ale chtěl bych, aby se to do budoucna dalo snadno rozšiřovat. Jinak velikost dat je individuální, stejně tak jako ti uživatelé, sdílení, ... To bych přenechal na koncovém uživateli...

Jinak jsem slyšel, že s xml se to dá elegantně řešit přes xml serializaci...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Abych se přiznal tak s XML velké zkušenosti nemám. Projekty které dělám v práci jsou na SQL serveru, protože se jedná o větší objem dat pro více uživatelů. Mohu Vám tedy vypsat pouze výhody používání SQL serveru (někdo více znalý XML by mohl vypsat jejich výhody:)

-u SQL serveru se Vám nemůže stát, že Vám uživatel smaže soubor kde jsou data

-budete mít k dispozici velmi pokročilé řízení přístupu uživatelů k databázi

-můžete si zde vytvářet stored procedury (dost mocný nástroj)

-můžete si zde vytvářet JOBY - automatické spouštění stored procedur, záloh atd.

-SQL server zvládne bez větších problémů větší množství dat, jedoduchá editace tabulek atd.

Nevýhodou samozřejmě je, že potřebujete server kde tato služba poběží a v neposlední řadě je mínus i cena SQL serveru (v případě že by Vám nestačila express verze).

Toť můj pohled, někdy by mohl vypíchnout výhody XML aby jste mohl zhodnotit svoje potřeby a vybrat si nejlepší řešení;)

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Děkuji. Asi se tedy přikloním k databázi... Bohužel tady zase já pro změnu nepoužívám moc databázi, takže to bude pro mě asi pracnější, ale nerad bych potom někdy v budoucnu kvůli objemu dat přepisoval celou datovou strukturu.

A mám ještě jeden dotaz. A tím jsou témata a master pages. Pravděpodobně bude každý uživatel chtít jiné téma, a to nejen třeba barvy, ale i rozložení prvků na stránce. Ale nenapadá mě jediný způsob, jak by se dalo tohle zjednodušit, než aby uživatel dělal nové styly, nové master pages, které by - dá se říct - opsal s těch stávajících, ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Není problém udělat pro aplikace více témat.Řešení je více,záleží na Vás které se bude líbit a bude vhodnější.Já osobně to řeším,tak že mám nadefinovaných několik témat(default,..),při první návštěvě stránky se použije styl "default" a dále mám na stránce rolovací lištu s nabídkami ostatních stylů.Při změně se načte i nové téma.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Buď jste mi špatně porozuměl, nebo ten probém mám já.

Chci řešit: uživatel si stáhne CMS a bude si chtít vytvořit vlastní téma( styly, rozložení prvků, ...). Jak mu mohu tuto činnost nejlépe usnadnit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejjednoduší bude dát uživateli výstupní html a nebo šablonu s html(tz.základní vzhled stránky).Případně popis asp.net komponent,které se stylují.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

K prvnímu dotazu DB vs XML. Práce s většími XML soubory je nepraktická, při sebemenší změně musíte nejdřív přečíst a pak zapsat celé XMLko, což už u souborů velikosti řádově stovky kB trvá nezanedbatelně dlouho, je to zbytečná režie.

Určitě bych se přikláněl k databázi, argument, že by se XML soubory snáze nasazovaly, je nesmysl - kdo neumí ani v souboru web.config změnit connectionString k databázi (i když to má každý webhostignový provider popsané, jak se to dělá na jeho hostingu), nemá co na web nasazovat aplikace.

Co se týče druhého dotazu, standardně se to řeší tak, že ve složce App_Themes máte složky s tématy, a když chce někdo nějaké nové téma udělat, prostě jen přidá složku a nastaví si, že aplikace bude používat to jeho nové. To není nic těžkého, dá se na to jistě udělat i klikací rozhraní, aby nemusel editovat web.config.

Co se týče MasterPages, tam bude asi trošku problém, zase ideální bude, když soubory pro jednu konkrétní masterPage budou v jedné složce, aby uživatel jen přidal složku do aplikace. Stránky se pak pomocí kódu začlení do správné masterPage atd. Případně v té speciální složce můžou být i nějaké vlastní ascx komponenty atd.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Tak napište datovou vrstvu abstraktně a nebudete mít problém později přejít na databázi, pokud je vám nyní bližší XML. Například ScrewTurn Wiki pro ASP.NET používá k ukládání dat obyčejné textové soubory a díky abstraktní vrstvě má nyní i podporu pro SQL Server bez nutnosti jakkoliv upravovat kód vyšších vrstev.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji. Tohle mi připadá dobré řešení. Mám ale k tomu jeden velice hloupý dotaz. Jak napsat datovou vrstvu abstraktně... ;-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

K tomu je potřeba znát jeden ze základních principů objektového programování, čímž jsou rozhraní a jejich implementace. Napíšete nejdříve rozhraní (interface), které definuje, které metody budete používat. Následně pak můžete mít libovolný počet tříd, která toto rozhraní implementují a dávají mu tak svoji funkčnost. V aplikačních objektech pak budete používat jako datové třídy pouze tyto interfacy. Ty pak zinicializujete na instanci třídy, která interface implementuje. Změnou vytvoření instance na jinou instanci můžete kompletně změnit funkčnost. Lepší ale bude, když si něco o interfacech nejdříve přečtete. Určitě by se na toto téma abstrakce hodil nějaký článek. Zkusím něco napsat na blog.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

moc děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už jsem si na internetu přečetl něco o interface. Už vím o co zhruba je, jak to použít, ... , ale nevím, jak vytvořit datovou vrstvu tak, jak jste říkal.

Mám například třídu, a v ní mám nějakou vlastnost (get, set). A tuto vlastnost potřebuji použít. Tzn.: natáhnu do ní nějaká data, buď z XML nebo SQL, a to samé i opačně. zápis dat do XML nebo SQL. Nechápu tedy, jak by mi v tomto případě mohla pomoci interface

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Interface popisuje jak má vypada třída. Tedy například budete mít interface IDataAccess. Ta obsahuje definici jedné funkce GetAllCategories(). Vy pak napíšete dvě třídy: SqlServerDataAccess a XmlFileDataAccess. Obě implementují interface IDataAccess, ale každá jiným způsobem - první SqlServerDataAccess provede dotaz do databáze a druhá XmlFileDataAccess přečte data z XML souboru. Ve výsledku pak používáte interface takto:

Dim dataAccess As IDataAccess
If pouzivalXml = True Then
    ' pouzivat datovou vrstvu pro XML soubor
    dataAccess = New XmlFileDataAccess()
Else
    ' pouzivat datovou vrstvu pro SQL server
    dataAccess = New SqlServerDataAccess()
End If

' zavolani funkce
Dim kategorie = dataAccess.GetAllCategories()

V první části kódu rozhodnete, která implementace inferfacu bude použita a tak i jestli využijete XML nebo SQL databázi. Implementací můžete mít kolik chcete, to už je na vás. Také doporučuji funkci, která rozhodne o tom, která implementace se použije, dát někam na jedno místo do programu. Ve chvíli, kdy budete chtít změnit jak data číst, pouze na tomto místě přepíšete, která instance třídy se vytvoří (například právě z SqlServerDataAccess na XmlFileDataAccess).

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Mnohokrát děkuji za tuto vyčerpávající odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Promintě, vím že mám spoustu otázek, ale na internetu jsem nenašel nic, co by mi dávalo nějaký sebemenší smysl. Mylím, že jsem stále nepochopil interface.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak tam přidat vlastnost?

public string Name
{
    get
    {
        return (Načíst ze třídy XmlDataAccess nebo SqlDataAccess proměnou Name_);
    }
    set
    {
        (.... Name_) = value;
    }
}

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback