Check dirty form

Question: Nên chọn cách quan lý dirty form nào?

C1) Chủ động: model sẽ tự kiểm tra và gọi kiểm tra trạng thái dirty của các thuộc tính con. Ưu: cài đặt đơn giản.
Khuyết: quá trình kiểm tra có thể lâu.

C2) Bị động: Các properties sẽ publish, và root sẽ subscribe các event đó.
Ưu: quá trình kiểm tra nhanh.
Khuyết: cài đặt phức tạp.

 

 

Lấy dữ liệu lên bao nhiêu là đủ?

Bài toán: Dạng master-detail, detail cho phép update. Vậy thông tin detail chứa bao nhiêu là đủ tốt: tất cả thông tin hay chỉ cần key là được?

Đề nghị:

C1: Thường theo lý thuyết sẽ chỉ cần key – thông tin detail sẽ load lên khi được chọn. Cách này được gì: load master tốn ít băng thông và nhanh. Mất gì: người dùng phải ngồi đợi load detail.

C2: Trong quá trình load master thì với mỗi detail, ngoài load key cần load thêm các thông tin cần thiết để cho phép cập nhật. Cách này giải quyết được các yếu điểm cách trên, nhưng cũng gây ra các hạn chế mà cách trên đã giải quyết.

Vậy dùng cách nào? Mình sẽ chọn cách 2 để cung cấp trãi nghiệm tốt hơn cho người dùng. Và có thể cải việc load master bằng cách:

  • Load và cache những thông tin chung (cache ở BE và FE).
  • Phân trang load master.

Cũng có thể chọn cách 1 nếu bạn phân tích được hành vi người dùng để dự đoán và load trước thông tin người dùng có thể sử dụng, đi đến. Đây là một bài toán đòi hỏi chi phí cao: nếu giải được bài toán này thì cách 1 vẫn tốt hơn so với cách 2.

[Dev Tip] Creating an Application with Yeoman aspnet generators

1) Visual Studio Code

Get Visual Studio Code from http://code.visualstudio.com

2) Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3) DNVM, Node, Yo, Generator-aspnet, and Bower

On OSX, run bellow statements in the Terminal

$ brew tap aspnet/dnx
$ brew update
$ brew install dnvm
$ source dnvm.sh
$ dnvm upgrade -u
$ brew install node
$ sudo npm install -g yo
$ npm install -g generator-aspnet
$ npm install -g bower grunt-cli gulp-cli

4) Move to your intented application folder to create new app with a chose template
$ yo aspnet
Choose a template project

$ dnu restore
$ dnu build
$ dnx . run for console projects
$ dnx . kestrel or $ dnx . web for web projects

[Dev Tip] Create new instant of Xamarin App on Mac

For some reason, you want to open some Xamarin solutions at same time. By default you can do that. There is a work around using applescript.

1) Open AppleScript Editor

2) write this sample statement

do shell script "open -n /Applications/Xamarin\\ Studio.app/"

3) Save it with type format is application.

4) run this file you will get a new Xamarin instant.

[Dev Tip] WIF SessionAuthenticationModule cookies across sub-domains

Sometime, you need support SSO among sub-domains. Beside set up WIF on each applications, using same machine key. But those apps still cannot use same cookie.

There is a solution for it: specify domain name before write session token to cookie:

var sessionToken = new SessionSecurityToken(principal);
FederatedAuthentication.SessionAuthenticationModule.CookieHandler.Domain = "domain.com";
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);

[Dev Tip] Remote debug

Sometime, you need to debug a program on a server or something like that and it doesn’t have an installed Visual Studio. Then how to debug that program?

1) On target machine

1.1) Install Remote Tools for Microsoft Visual Studio XXX with XXX is version of your VS.

1.2) run Remote Debugger

server

Note: It opens port 4018.

2) On you machine

2.1) Attach debug process

client1Note: 192.168.16.254 is target’s IP.

Choose your process which you want to debug. At here i debug IIS.

client2

Attach that process and debug. 🙂

Note: Modules windows, Load symbol

or

set up debug 1

[Dev Tip] Claim-based notes

#1) Set IsAuthenticated = true

The IIdentity interface has the IsAuthenticated property. This is typically set to true whenever you deal with implementations of that interface, e.g as soon as you set the Nameproperty of GenericIdentity, IsAuthenticated is automatically set to true. IIRC in WIF, as soon as a ClaimsIdentity had a claim, IsAuthenticated was set to true.

This has changed in .NET 4.5. It is now possible to create a ClaimsIdentity that has claims, but having IsAuthenticated set to false. Actually this is the default now, when you new upClaimsIdentity like this:

var id = new ClaimsIdentity(claims);

To have IsAuthenticated set to true, you need to specify an authentication type in the ctor:

var id = new ClaimsIdentity(claims, “Custom”);

#2) Claims principal

You don’t need to set the Thread.CurrentPrincipal because the session module will do this for you. You will need to access it through the HttpContext.Current.User because the Thread.Principal is usually set on a different thread than the one accessing your service because it is two different modules in IIS.