4/13/09

Building Saas application in .NET


Take advantage of ASP.NET single sign-on

If your application is going to be comparmentalized into multiple sections, consider using third domain (sub-domain) such that you have

http://foo.myapp.com
http://bar.myapp.com

then make sure to enable cross-sub-domain SSO by writing the ASP.NET forms authentication cookie against "myapp.com" domain (as against a specific sub-domain such as "foo.myapp.com" or "bar.myapp.com"). This provides extension points for additional ASP.NET web applications while using the same login sessions.

Consider using third-party single sign-on integrations
Try not to build your own identify server. That is: do not implement your own "login" page that takes password that you manage. You want to stay away from that. Instead, use external identity servers including Windows Live!, Yahoo BBAuth, OpenID, etc. This is a win-win for developers as well as users.

Use XML schema-driven business objects
After many tries with different approaches, I am convinced that using XML Schema (XSD) with tool generated C# wrapper is the best way to capture business objects. For any new web application, I create a folder called "Entities", and I create three files:

mybusinessobjects.xsd
mybusinessobjects.cs
generate.bat

mybusinessobjects.xsd will contain all of the data type definitions of the application's business objects. For example, if your application is about student enrollment process, then you will define Studen, Course, Semester, etc. in this XML schema.

mybusinessobjects.cs is not manually created but created by running XSD.exe tool, that takes XML schema file and produces a C# class definitions. generate.bat is for running XSD.exe and it looks like this

xsd.exe mybusinessobjects.xsd /n:MyApp.Entities

By executing this line, you will easily get C# object representations of all of the things you defined in mybusinessobjects.xsd, placed in the namespace, "MyApp.Entities"

These tool-generated C# classes are in-memory "storage" for your business objects, and they can be serialized to XML (and deserialized from XML) very easily.

This serializability between XML and C# is very convenient and flexible. For example, you can write UI that takes C# object model and set it to DataSource of ASP.NET Repeater control. Or, you can deserialize it to XML and pass it through XSLT to produce another XML, which can be consumed by an existing code. It opens up possibilities to working with your business objects.

Use XML to communicate with Database
After many attempts to use DataSet in ADO.NET, I am settled with this approach. The idea is to use very stable stored procedure interface, and use XML as input and output parameters, and all variations are captured in XML input/output. For example, many of the stored procedures have the same signature of:

sp_foo(userId, languageId, xml)

which returns string (which is xml output)

Note: there will be some stored procedures that must deviate from this pattern

With this interface, you can easily build Data Access layer that can be used by Business Logic layer to update data and retrive data to/from database.

The stored procedure has to be written such that it can take incoming XML and parse it to obtain necessary inputs for the procedure, and be able to form XML output. (Luckly, DBA I work with is very good at this that I don't need to know how its done exactly...)

Use SQL Data Services
This is another approach for solving data storage needs for a SaaS application. Instead of your maintaining database for your self, completely offload that task to cloud computing. Though I have not used it for commercial development project, I am convinced that SQL Data Services provides sufficient data storage capabilities to web-based application. The benefit is clear: you do not need to maintain your own database tier in your data center (and if you use Azure, where you host your ASP.NET application, then you don't need data center all together!); you pay as much as you use so it is cost-effective.

Use YUI (Yahoo! UI) for your page development
I have used YUI for both work and hobby and works great. It gives you browser neutrality right from the beginning. Let these experts at Yahoo! to solve browser compatibility issues and just focus on solving your own problem. YUI can be a bit tricky to use in ASP.NET, but many of the components in YUI can be used easily in simpler cases.

Use HttpHandler for AJAX server
It is possible, and often done, to use regular ASP.NET pages (.aspx) to implement server-side logic that returns XML (or JSON) output to a client-side script. Howerver, it makes more sense to implement such server-side logic using HttpHandler, which is more efficient than ASP.NET pages, and fits well with the model of "client script (UI) - server logic (BLL)". Essentially, client script is acting as user interface, and if you follow strict sepration of UI and Logic, then your server-side logic should not have anything to do with UI, such as page controls. HttpHandler is nothing but an end-point responding to an Http request, where returned output may not necessarily HTML but XML, JSAN, image, document, etc.

Enable Google Analytics right away
No further discussion on this. Just do it.

Pay attentions to security from the beginning
With web application, you want to start with "locked" down application instead of you lock it down as you go by. Read up "cross-side scripting" and "SQL injection" first and make sure we have no holes for that. Compile a list of Query string being passed around, Cookies saved to the user's machines, input fields that user can type in, and make sure each item is being evaluated to ensure that these cannot be exploited.

Build exception and error handling infrastructure
First thing you have to do is to define "application exceptions" at your Business Logic layer. Any Business Logic has an error condition that is created because of "user". For example, with Student Enrollment application, if one of the business rules states that "You cannot sign up for a class unless pre-requisites are completed", then you have an exception. Yes, UI can try to make sure that it will never be in such condidtion, but who knows? Business logic layer should NOT rely on UI does good job and never create such situation. Instead, Business Logic should throw "application error".

This is one of the most important use of Exception handling. You will define your own "application exception" that can be presented to the user and "user" can modify his/her behavior to fix the issue. This is in contrast to "system exception" where it is due to system error and not user. For example, if disk space run out and causes IO exception, user can do absolutely nothing to remedy that.

So, you deal with two large groups of exceptions: Application Exception and System Exception. Now, how do you handle them and where? The answer is: at each page, look at method that make call to Business Logic layer and wrap it around with try block, then create one catch block to handle application exception, and anthor one for system exception. The way you handle two kinds of exception is different: for application exception, tell user why and what user should to do avoid receiving the same exception (example: show message like "You are not allowed to enroll this course because you have not completed HIS101"). In contrast, for system exceptions you want to show something like "A system error encountered. The error has been reported to system administrator. If this problem continues, please contact xxx-xxxx. Error Code: 2231".

When handling system exception, your catch code must log the error to somewhere (such as text log file or event log). Ideally, you generate a unique Error Code value, and write it to the event log with the detailed error information, and also show it to the end user. This way, when user calls for a help, technical person at our end can locate the related error event log.

Use WF and WCF right from the beginning
There are features in Workflow Foundation and Communication Foundations that let you implement your application features easily and effectively. WF comes with sequential workflow and state machine workflow that models many real-world workflow. For example, "student enrollment" is a perfect example for sequential workflow that takes multiple input values to produce a result (student has sign up, system accept it, schedule bill, etc.)

WCF opens up possibilities to "extentions" such as web-service, REST based API, working with additional back-end engines, etc. The boilerplate code for hand-shaking, security, throttling and bufferin, are all taken care of for you.

Engage users as soon as possible
In another word, engage in Agile software development model. I strongly recommend using User Stories methodology to drive the whole development process. Good applications solve real user problems, and to do so developers need to know what the problems users are facing. Sometimes users don't know how to describe the problems, and/or they may not understand the best way to solve it. The chances are, the application you built today will be ineffective tomorrow and you will have to make constant changes to the application. So, stay small and address core issues first, then present it to the users to see if it is indeed solveing the users problem. Do not waste time working on bells & whistle since users can go without them for a while.

Integrate with Facebook and other social media as much as possible
Consider creating a Facebook application that provides an interface to your web application. At minimum, Facebook app has iFrame mode where you can show your web application interface embedded in Facebook. Of course, if you can integrate more, that would be nice. Facebook is an organic solution delivery mechanism where solical graph drives the distribution of solutions. If your application solves a problem for one Facebook user, then chances are, it will be useful to other Facebook users, and the initial "case" of one user solving his/her problem can proliferate to other users with similar problems. Forget the classic "you come to our website and sign up to get good stuff" model.

That's it for now...

263 comments:

«Oldest   ‹Older   201 – 263 of 263
スタービーチ said...

一時代を築いたスタービーチは閉鎖になってしまいましたが、もう一度楽しい思いをしたい、もう一度遊びたいと思う有志により再度復活しました。本家以上に簡単に会えて楽しい思いを約束します

NHKマイルC said...

NHKマイルC 2010 予想、オッズ、厳選買い目は?今年の狙うべきポイントを限定公開!

友達 said...

彼女募集中の人やフリーの人は絶対絡んでください☆ゆきとメールしよ♪ chu-chu-chulip@docomo.ne.jp

モバゲー said...

日本最大、モバゲーより面白いであい系スタービーチがついに復活、進化を遂げた新生スタビをやってみませんか?趣味の合う理想のパートナー探しの手助け、合コンパーティー等も随時開催しています。楽しかった頃のスタビで遊んでみよう

スタービーチ said...

ついに帰ってきたドキドキスタービーチで素敵な恋をGETしよう♪会員数も50万人突破で以前よりも直ぐに理想の相手にであえちゃう!!恋人募集中!!友達仲間を増やしたい方必見!!素敵なであいをお楽しみ下さい☆

ヴィクトリアマイル 2010 said...

ヴィクトリアマイル 2010 予想、オッズ、厳選買い目は?人気が平然と馬券に絡む理由とは

恋人 said...

ちょっとこんなところに書き込むのはちょっとおかしいんですけど…GWは色々楽しめました??私は結婚しているんですけどどこにも連れて行ってもらえませんでした…旦那は友達(?)とマカオに遊びに行ってます…怪しいですよね…私もスカッとパーっとしたいです♪良かったらメールしてくれる人居ませんか? sara-sarar@docomo.ne.jp

ヴィクトリアマイル said...

ヴィクトリアマイル 2010 予想、オッズ、厳選買い目は?今年の波乱をズバリ!確勝買い目公開中!大穴狙いのギャンブラー必見激アツ情報

モバゲー said...

モバゲータウンでであいを求めているなら当サイトへ!当コミュニティサイトは本家のモバゲータウンよりはるかにであいやすい、まさにユーザー様の為のサイトとなっております。であいをお楽しみください

SM度チェッカー said...

飲み会やコンパで必須のSM度チェッカー、お手軽SM度診断!実は真面目な娘程、間逆なドS女王様、遊んでそうな娘はドMな奴隷願望が有るとか。診断結果を元に隠れた性癖を暴いて盛り上がろう

オークス said...

オークス 2010 予想 オッズ 出走馬 枠順で厳選買い目は?今年の波乱をズバリ!確勝買い目公開中!優駿牝馬はこれでもらったも同然

オークス 2010 said...

オークス 2010 予想 オッズ 出走馬 枠順で万馬券も夢じゃない?人気が平然と馬券に絡む理由とは!?今年の優駿牝馬は荒れるのか

友達 said...

もぅすぐ夏ですね☆一緒に海に行ったりしたいなヾ(>▽<)o himawari-yumeland@docomo.ne.jp

トゥイッター said...

最近、話題のトゥイッターから始まる理想の関係…理想の恋をこの場で見つけていきませんか

スタービーチ said...

スタービーチは誰にでも出逢いという奇跡をもたらしてくれる。スタビで理想の関係作りしてみませんか

名言チェッカー said...

自分の名言を一つは残しませんか、しかし考えると意外と難しい。そんな時に名言チェッカーならあなたの本当の性格を見抜けちゃいます。世界の偉人達が残した名言にはどことなく重みがあるものです

日本ダービー said...

第77回 日本ダービー 2010 予想、オッズ、厳選買い目は?今年の波乱をズバリ!確勝買い目公開中!結果を出す前に結果がまるわかり

スタービーチ said...

スタービーチから始まる新たな恋をしませんか?スタビ掲示板を利用して新たな恋をしていきましょう

日本ダービー said...

第77回 日本ダービー 2010 予想、オッズ、厳選買い目は?人気が平然と馬券に絡む理由とは!?見事に展開を読んで結果を的中させる

出会い said...

エロセレブとの出会いを完全無料でご提供します。逆援助で高額報酬をゲットしよう

モバゲー said...

モバゲータウンでいろんな異性と交流を深めあいませんか。異性に対して経験がない方でも簡単にお楽しみいただける、シンプルかつ効率的に優れているサイトとなっています

ツイッター said...

全世界で大ブームを巻き起こしているツイッター!!それを利用して今まで経験したことがないような恋を経験してみませんか

モテる度チェッカー said...

モテる度チェッカーが今回リニューアルしました!!今迄と違い診断内容にモテない人と診断された方を救済する、速攻効果が出るモテる為のアドバイスが付きます、またモテる診断された人には、より一層のモテ・テクニックを手に入れませんか

安田記念 said...

第60回 安田記念 2010 予想 オッズ 出走馬 枠順で万馬券をズバリ的中!絶対なるデータが確実に当てるための秘訣

安田記念 said...

第60回 安田記念 2010 予想 オッズから展開と結果をズバリ当てる!出走馬、枠順など全てを考慮にいれた緻密なデータをもとに検証

スタービーチ said...

スタービーチで素敵な愛を掴みませんか?愛に対する理想や想いを現実にしていきましょう

モバゲー said...

モバゲータウンでは今までとは一味違う出逢いを体験する事ができるのです。これまで良い出逢いがなかった人にはもってこいの無料登録型の掲示板です

ゲーマーチェッカー said...

ゲーマー達のステイタス、ゲーマーチェッカーであなたのゲーマー度数を測定!!測定結果を元に自分と同レベルのオンライン対戦も出来ます。ゲームが得意な人もそうでない人もどちらも楽しめますよ

スタービーチ said...

日本最大級のであいコミュニティ「スタービーチ」で恋人を探しませんか。素敵なであいを経験して理想の人と楽しい思い出を作りましょう

スタービーチ said...

であい系の元祖はやっぱりスタービーチ!初めてであい系にチャレンジする娘も多いここならゲット率は最強

モバゲー said...

モバゲータウンでであいを楽しみませんか。気軽に誰でも楽しめるであいサイトとなっています。こんな事をしてみたいなど希望の事が実現できる、そんなであいコミュニティサイトです

出会い said...

エロセレブとの出会いを完全無料でご提供します。逆援助で高額報酬をゲットしよう

スタービーチ said...

スタービーチがどこのサイトよりも遊べる確率は高いんです。登録無料で新しい恋をGETしてみませんか

出会い said...

出会い系サイトで逆援助生活をしよう!エッチなセレブ女性たちが集まっています

玉の輿度チェッカー said...

今の時代簡単に金持ちになる方法は中々無いけど、可能性は誰しも秘めてます!!そう一番手っ取り早いのは玉の輿です。この玉の輿度チェッカーをキッカケに金持ちになった方が、意外と多いのです。是非あなたも一段高みを目指しませんか

出会い said...

一流セレブたちが出会いを求めて集まっています。彼女たちからの逆援助でリッチな生活を楽しみましょう

流出画像 said...

芸能人のプライベートな流出画像など、色々なヤバい写真も見れる。無料登録で思う存分楽しんで下さい

出会い系 said...

セレブの為の出会い系、セレブの雫では女性会員数も増え、男性会員様が不足するという状態となっております。そこで先着順に、男性会員様を募集しております

スタービーチ said...

日本で一番会員数が多いのはやっぱりスタービーチ!若い娘から熟女まで好みのご近所さんがすぐに見つかる☆無料期間中に試してみませんか

SM度チェッカー said...

最近普通のプレイに物足りなさを感じているそこのアナタ、ワンランク上のプレイをしてみませんか?そんな時の目安にSM度チェッカーを使うんです。自分の深層心理を暴きパートナーとのプレイ時のアドバイスも付きますよ!!一度どうですか

モテる度チェッカー said...

夏休み目前になり、一人で大事な休みを過ごすのは誰でもイヤと違う?そんな時にモテる度チェッカーで簡単診断、この夏アナタも彼氏・彼女と過ごすための貴重なアドバイスが手に入りますよ、もうアドバイスに対しての感謝のメールが毎日!!アナタもこの夏を乗り遅れるな

ツイッター said...

今話題沸騰中!?新感覚出会いをツイッターで体験しませんか?リアルタイムで相手が何をしてるか分かるから、理想の人かどうかが簡単に分かる。貴方の理想の人をGETしませんか

mコミュ said...

素敵な出 会 いで愛を育む♪理想の人と楽しめる関係を築きませんか?mコミュでしか味わえない幸せを掴みましょう

スタービーチ said...

スタービーチで会える!?理想の異性をGETしよう☆素敵な出会いばかりだから求めている関係も作りやすい!!貴方が求めているのはどういった恋ですか?

名言チェッカー said...

他の人が言ってる名言や格言って良い事言ってるな~とか思ってる方、名言チェッカーで今日から自分に相応しい言葉を見つけませんか!!これでどんな人にも一目置かれる存在に為れますよ

mixi said...

mixiをも凌駕する出会い率!!出会いをするならここしかない♪mixiより出会えてしまうこのサイト。一度ハマれば辞めれません。スタービーチで素敵な出会いをしちゃいましょう

モバゲー said...

モバゲーで出会いをすれば楽しい事は間違いありません。暑いからこそ出会いを楽しむべきなのです。登録無料で簡単に利用可能!

モバゲータウン said...

モバゲータウンでは恋愛から出合いまでのキッカケをつかめる無料のコミュニティサイトです。常時サポートスタッフが掲示板をチェック、サクラや業者を排除しておりますので安心してご利用いただけます

スタビ said...

スタビが今一番アツイのはご存じでしょうか?夏休みで出会いを探している娘とすぐに会えちゃうんです。登録無料でここまで出会える所は他には存在しません。今登録して良いパートナーに巡り合おう

スタービーチ said...

出会いのシーズン、夏到来!スタービーチでご近所さんと知り合っちゃおう!ひと夏の体験も女の子は求めている

モバゲー said...

モバゲーでついに出会いができる!?楽しめる出会い、求めていた出会いはココから始まる。素敵な出会いでまずは関係づくりwしていきましょう

gree said...

greeで素敵な時間を過ごしたい・・・そんな願望を叶えてくれるサイト誕生!!今までにないドキドキ感と興奮をこのグリーで楽しみましょう

スタビ said...

スタビで出会いができる!!いつでもどこでも出会いが可能なスタービーチで最高の出会いをしてみませんか

mコミュ said...

簡単な出逢いはココでできる☆素敵な出逢いをmコミュで体験していきませんか?楽しめる出逢いを経験するならここしかない!!まずはお試しを

ツイッター said...

新時代突入!ツイッターで始まる出逢い…ここでしかできない出逢いが新しい風を巻き起こす!!素敵な巡りあわせを体験していこう!

SMチェッカー said...

あなたの秘められたSM度がわかるSMチェッカー!簡単な質問に答えるだけで自分の隠された部分が分かります!みんなで試してみよう

モバゲー said...

今やモバゲーは押しも押されもせぬ人気SNS!当然出 会いを求めてる人も多い!そこで男女が出 逢えるコミュニティーが誕生!ここなら友達、恋人が簡単にできちゃいますよ

モバゲー said...

もう夏休みも終わりに近づき、この夏最後の思い出を作りたいと焦ってる方が、モバゲーのコミュニティーに書かれてましたよ!!折角なんで夏の思い出作りに協力して自分も美味しい思いをしてみるのはどうですか?大手スポンサーサイトが付いてるので全部タダですよ

グリー said...

最近はどこのSNSサイトも規制ばっかりで、ちょっと出 合いに関して書き込みするとアク禁食らうけど、夏休み終盤に差し掛かり色々なサイトを調べた結果、グリーだけはどうも規制が緩んでるみたいです。今がチャンスの時期ですよ

ツイッター said...

ツイッターで出 合 いを求めるのです。気の合う異性と交流して楽しいひと時をお過ごしください。登録無料で使えるので気軽さは100点満点!

モテる度チェッカー said...

夏休みももう終わりに近づきこのまま一人は寂しいのちがう?そこでモテる度チェッカーを使い自分がなぜモテないか診断してもらいましょう。10~20代の女性アドバイザーが多数在籍してるので、アドバイスを参考に夏終盤を楽しもう

Natural stress relief pills said...

真面目なあの娘も夜はドS女王様、ツンデレなあの子も実はイジめて欲しい願望があるかも!?コンパや飲み会で盛り上がること間違いなしのおもしろツールでみんなと盛り上がろう

Hersolution female stimulant gel said...

これは効果的であるmethod.Iはそれを適用し、help.Iが嬉しい得たことを私達とそのような効果的な方法を共有するための

«Oldest ‹Older   201 – 263 of 263   Newer› Newest»