Thứ Sáu, 24 tháng 2, 2017

Một số Design Patterns phổ biến

Design Patterns cung cấp giải pháp chuẩn và hiệu quả cho việc thiết kế phần mềm và giải quyết các vấn đề trong lập trình; Sử dụng lại mã nguồn, linh hoạt và chặt chẽ. Các thiết kế này hình thành trong quá trình xây dựng các hệ thống phần mềm, được các người có kinh nghiệm tổng hợp và soạn thảo ra.

Tuy nhiên, bạn phải lựa chọn đúng design pattern để giải quyết bài toán. Nếu không, việc phải thay đổi thiết kế quá nhiều để đáp ứng đúng yêu cầu nghiệp vụ dẫn đến khó bảo trì, phức tạp và không hiệu quả.

Sau đây là một số design patterns phổ biến, được chia vào các danh mục:

Creational Patterns (Các pattern cho việc Khởi tạo)

  • Abstract Factory:
  • Builder
  • Factory Method
  • Prototye
  • Singleton
 Structural Patterns (Các patterns về cấu trúc)
  • Adapter
  • Bridg
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy

Behavioral Patterns (Các patterns về hành vi)

  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

 Sau đây là các mô tả ngắn gọn và dễ hiểu nhất:

Abstract Factor:

+ Rất thường xuyên được sử dụng (5*)
+ Dùng một class-gọi là Factory để khởi tạo các object khác (tương đồng nhau), dựa vào một điều kiện phân biệt nào đó. Ví dụ: Ta dùng trong việc xây dựng một ứng dụng có thể sử dụng nhiều nguồn database khác nhau (Oracle, SQLServer, MySQL,...), chỉ khác nhau cách kết nối. Các phương thức truy vấn dữ liệu là giống nhau về mặt defining, chỉ khác nhau về mặt implement. Như vậy, dù thay đổi database (bằng cách thay đổi configuration, connection string) nhưng ta vẫn cho ra các kết quả (tương đối) giống nhau mà không phải chỉnh sửa nhiều.

Factory Method:

+ Rất thường xuyên được sử dụng (5*)
+ Cho phép dùng một interface để khởi tạo object. Tác dụng của pattern này đề cao tính mở rộng được. Ví dụ một ứng dụng quản lý tài liệu (document). Các Document sẽ tuân theo interface IDocument. Các document này có thể là TextFile, Word, Visio,... nhưng có những thuộc tính chung như: tác giả, kích thước, số trang,... Khi xuất hiện một dạng document khác như Excel chẳng hạn, chỉ việc implement IDocument

Prototype:

+ Không thường sử dụng lắm (3*).
+ Nó hay được sử dụng hơn khi xây dựng những applications dạng computer graphic như: CAD, GIS, games,...
+ Cũng giống như các pattern creational ở trên, nó cũng che giấu việc khởi tạo object với phía client. Tuy nhiên, thay vì tạo các object mới tinh, nó khởi tạo cùng các giá trị copy theo một nguyên mẫu (prototype) nào đó (clone)

Singleton:

+ Sử dụng khá thường xuyên (4*)
+ Đảm bảo một class chỉ có một instance được tạo và cung cấp một điểm toàn cục để truy cập nó.
+ Phần lớn các objects trong application có tác dụng/công việc của riêng chúng và hoạt động riêng theo dữ liệu của chúng. Tuy nhiên, một số đối tượng có trách nhiệm và phạm vi hoạt động rộng hơn mức toàn cục, ví dụ như quản lý giới hạn tài nguyên, giám sát tình trạng toàn bộ hệ thống.
+ Tác dụng nữa có pattern này là nâng cao hiệu năng làm việc. Các đối tượng ở đây sẽ không phải khởi tạo rồi hủy nhiều lần.

Adapter:

+ Sử dụng khá thường xuyên (4*)
+ Chuyển interface của một class sang một interface khác.
+ Ví dụ khi bạn sử dụng third party libraries, nhưng một số các hàm, các properties có vẻ không đúng với yêu cầu của client (expectation). Lúc này bạn sử dụng Adapter pattern. Lớp Target là lớp có thành phần đang không đúng yêu cầu, bạn tạo một lớp Adapter kế thừa từ lớp Target. Lớp Adaptee là một lớp thực sự thực thi lại, Adapter sẽ override và gọi hàm thực thi thật sự từ Adaptee.
 + Pattern này thường được sử dụng trong lập trình môi trường nơi các thành phần, các ứng dụng mới cần được tích hợp với nhau và làm việc cùng với các thành phần cũ.

 Composite:

+ Sử dụng khá thường xuyên (4*).
+ Sắp xếp các objects theo dạo dạng hình cây phân cấp.

Facade (mặt tiền):

+ Rất thường xuyên được sử dụng (5*)
+ Cung cấp một interface thống nhất cho một tập các interfaces trong một hệ thống con. Facade định nghĩa một high-level interface để tạo cho hệ thống con dễ sử dụng
+ Một class được viết làm đại diện, một hub cho các class trong hệ thống con. Class này tập trung các chức năng của các class riêng lẻ, sau đó tạo ra các chức năng về business logic hơn.

Proxy:

+ Sử dụng khá thường xuyên (4*).
+ Ví dụ khi bạn xây dựng ứng dụng mà có chức năng phụ thuộc vào remote resource (từ máy khác, từ server) hoặc là một object nào đó cần nhiều thời gian để load (parsing, ghi file...). Trong tình huống này ta áp dụng Proxy pattern, tạo một proxy object bên cạnh object gốc. Proxy sẽ đứng giữa và chuyển request cho object đích, kiểm soát về mặt truy cập. Client không cần quan tâm/nhận thấy là đang giao tiếp với Proxy hay là object gốc.

Command:

+ Sử dụng khá thường xuyên (4*).
+ Đóng gói một yêu cầu thành một object request, cho phép tham số chúng cho các request khác nhau.

Iterator:

+ Rất thường xuyên được sử dụng (5*)
+ Trong lập trình, chúng ta thường thao tác với collection of object. Các collections này lưu trữ dữ liệu như: Array, list, tree, graph struct... Thêm nữa, bạn có thể cần truy cập các phần tử trong collection với thứ tự rõ ràng: trước ra sau, sau lên trước, first/last, tìm kiếm,... Pattern Iterator giải quyết các vấn đề này bằng cách chia tách collection theo các chức năng riêng biệt.

Observer:

+ Rất thường xuyên được sử dụng (5*)
+ Định nghĩa một liên kết phụ thuộc one-to-many giữa các objects để mà khi một object thay đổi trạng thái, tất cả các object phụ thuộc (các object quan sát) nó đều nhận thấy và tự động thay đổi theo.
+ Khi xây dựng ứng dụng Web hay Windows form, chúng ta thường làm việc với events và event handlers; Events và Delegate.

Thứ Tư, 22 tháng 2, 2017

Cách viết một tài liệu Detail Design hiệu quả

Càng ngày, các lập trình viên có thể làm được nhiều việc hơn trong thời gian ngắn hơn. Ngày nay, với nhiều ngôn ngữ lập trình cao cấp, môi trường làm việc, các công cụ hỗ trợ và tư tưởng phát triển phần mềm, cả LTV và nhà quản lý đều trở nên quen thuộc với việc cần phải tạo ra sản phẩm một cách cực kỳ nhanh chóng. Các lập trình viên có xu hướng bắt tay ngay vào bước coding vì sợ không kịp thời gian, chậm deadline, over-time...

Quá trình thiết kế trước khi coding đang trở thành lỗi thời. Tài liệu thiết kế đang hiếm dần. Nhiều LTV không bao giờ viết một tài liệu thiết kế, thậm chí không có ý định làm như vậy khi xây dựng phần mềm. Đến khi được yêu cầu, họ thường tạo ra rất nhiều sơ đồ tương tác và sơ đồ lớp mà thường không thể hiện quá trình suy nghĩ của họ trong giai đoạn thiết kế. Bài viết này sẽ thảo luận làm thế nào để viết một tài liệu thiết kế hiệu quả, chính xác. Đồng thời thảo luận về lý do tại sao một tài liệu thiết kế cũng là một trong những công cụ giá trị nhất khi thực hiện dự án.

Tại sao cần tài liệu thiết kế?

Tài liệu thiết kế là một cách để bạn giao tiếp với cộng sự về những giải pháp được chọn lựa, và trình bày lý do tại sao các giải pháp này là đúng đắn. Đừng lo lắng nếu như thiết kế của bạn không có đủ các sơ đồ, biểu đồ đúng chuẩn. Và cũng đừng lo lắng về các công cụ đặc biệt để tạo ra tài liệu. Yếu tố quyết định một tài liệu tốt là nó giải thích rõ ràng ý tưởng của bạn.
Việc diễn tả được ý tưởng là một vấn đề. Để truyền đạt được những giải pháp trong thiết kế, bạn phải xác định đến đối tượng người đọc. Đồng nghiệp của bạn có thể có cái nhìn khác so với quản lý của bạn, về kỹ thuật chuyên môn chẳng hạn. Vì vậy, thậm chí có hai tài liệu thiết kế riêng cho hai đối tượng này.

Điều gì tạo ra một thiết kế tốt?

Một thiết kế thường được coi là tốt nếu nó đáp ứng các yêu cầu một cách có ý nghĩa. Nếu bất kỳ khía cạnh nào của thiết kế không rõ ràng, nó có thể sẽ cần được đánh giá lại. Nhiều LTV cố gắng kết hợp các mẫu thiết kế thành công trước đây của họ và nhiều khi giờ đây nó trở nên phức tạp không cần thiết. Bạn nên liệt kê ít nhất một lý do thuyết phục để chứng minh cho giải pháp được lựa chọn. Nếu không tìm được lý do cho giải pháp mình lựa chọn thì nó chẳng có giá trị gì.
Các biểu đồ là công cụ tuyệt vời để diễn đạt thiết kế của bạn, nhưng nó không truyền tải nguyên nhân bạn chọn thiết kế ấy. Vì vậy nó quan trọng nhưng không phải là tất cả.
Các lợi ích khi chọn lựa giải pháp cần được trình bày. Tương tự các rủi ro liên quan cũng cần được nêu rõ. Bằng cách trình bày rõ ràng, đồng nghiệp có thể bàn bạc với nhau, tìm ra lỗ hổng, những rủi ro tiềm tàng, giúp giảm thiểu những vấn đề trong tương lai, trước khi bắt tay vào viết mã, tránh phải đập đi hàng ngàn dòng code do không lường trước được thay đổi.
Cuối cùng, thông qua tài liệu, mọi người sẽ sử dụng chung những thuật ngữ phổ biến của dự án. Tài liệu thiết kế cũng là một công cụ mạnh mẽ cho người quản lý nắm được tình hình dự án vì họ thường không tham gia quá sâu vào chuyên môn kỹ thuật.
Tài liệu dự án cũng đóng vai trò là một biên bản thống nhất giữa mọi người. Làm việc gì cũng tuân theo thiết kế và mọi người đều công nhận với nhau. Khi có điều gì thay đổi, cần được thống nhất lại và biên bản hóa nó.

Các nội dung của thiết kế

Mục đích dự án (Purpose): Trong đoạn này, viết một đoạn ngắn gọn mô tả những gì hệ thống thực hiện, vấn đề nó đang cố gắng để giải quyết là gì. Tại sao nó cần để tồn tại. Ai sẽ sử dụng nó. Bằng cách trả lời những câu hỏi này, bạn thiết lập phạm vi thiết kế của bạn. Nếu bạn cảm thấy khó khăn để viết đoạn này, bạn chưa hiểu đủ về domain. Sử dụng phần này như một công cụ để xác định phạm vi.

Xác định các thực thể ở mức high level (high level entities): Các đơn vị cấp cao là các đối tượng, các nhóm đối tượng tạo thành cấu trúc chính của thiết kế. Ví dụ các thực thể là một lớp truy cập dữ liệu, một đối tượng điều khiển, một tập các đối tượng nghiệp vụ. Ví dụ:

Trong phần này, mô tả ngắn gọn từng thực thể là gì, vai trò, lý do.

Xác định low level trong từng thực thể: Định nghĩa các đối tượng và các mối quan hệ của chúng:
+ Sử dụng (Usage): Mô tả một đoạn cách sử dụng thực thể, chức năng của nó trong hệ thống. Quan trọng nhất là bạn phải mô tả quá trình suy nghĩ đã xác định đối tượng. Liệt kê những lợi ích và rủi ro.
+ Cấu hình (Configuration): Nếu đối tượng cần cấu hình hoặc khởi tạo, hãy mô tả nó.
+ Mô hình (Model): Đừng lo lắng về độ hoàn hảo của sơ đồ, nhưng hãy chắc chắn mô tả những gì đang xảy ra trong sơ đồ.
+ Tương tác (Interaction): Một sơ đồ tương tác cho thấy làm thế nào một tập các đối tượng hoặc các thực thể giao tiếp với nhau để thực hiện một nhiệm vụ phức tạp. Ví dụ:

Lợi ích, giả định, rủi ro/vấn đề: Trong phần này, cung cấp một danh sách từ 5-6 lợi ích hàng đầu, một danh sách của tất cả các nguy cơ đã biết và một danh sách tất cả các giả định. Một số này có thể chỉ là xào xáo từ những phần trước của tài liệu, tập hợp lại vào một phần này cho rõ.
Đừng bao giờ loại bỏ bất cứ điều gì ở phần này. Bạn có thể nhìn vào phần này để biết ngay lập tức những rủi ro hiện tại trong thiết kế.


Kết luận

Khó nhất của việc viết tài liệu thiết kế là chẳng có gì để viết. Phần khó tiếp theo là đi qua các thiết kế logic trước khi bạn bắt tay vào coding. Một khi bạn có một cái nhìn về các đối tượng, thành phần, thực thể được sắp xếp lại với nhau, viết ra sẽ dễ hơn. Thêm nữa, nó không cần yêu cầu phải có các công cụ đặc biệt, word và paint là đủ.
"Nếu bạn không có kế hoạch, sau đó bạn có kế hoạch để thất bại - If you fail to plan, then you plan to fail".

Thứ Tư, 15 tháng 2, 2017

SharePoint .NET Server, CSOM, JSOM, and REST API index

Sharepoint API index
Sử dụng API index để tra cứu những đối tượng hay dùng nhất:

+ API: AttachmentCollection, SPAttachmentCollection
+ SP.Object/Enumeration (sp.js): SP.AttachmentCollection
+ REST Endpoint": …/_api/web/lists('<list id>')/items(<item id>)/attachmentfiles

+ BasePermissions SPBasePermissions
+ SP.BasePermissions object
+ N/A

+ CalendarType SPCalendarType
+ SP.CalendarType enumeration
+ N/A 
 

+ ChangeCollection SPChangeCollection
+ SP.ChangeCollection object
+ …/_api/web/getchanges(changequery)

Tham khảo chi tiết

SharePoint-Hosted App - Part 4

SharePoint-Hosted App

A SharePoint hosted app is one where the business logic is implemented within the client (browser). These types of apps do not have any external dependencies nor do they use any server-side code but they can utilize some SharePoint artifacts such as lists and libraries for storing content. SharePoint will host the app in a special isolated subweb (SPWeb) that has all the same capabilities of a regular SPWeb. All logic & code runs in the client. Apps could make external service calls from the client using some provided tools.

Understanding the App URL

Consider an app installed in the SPWeb http://intranet.mydomain.com .The app URL will be (for example): http://app-bf473b5225nn0f.apps.mydomain.com/SharePointAppWebTitle
AppUID and AppName are highlighted in bold in the above Url. App UID is a unique 14 character identifier that is given to each app installation in that particular customer /tenancy. This makes the domain unique for each app. App Name is the name of the SPWeb folder under which the app is installed. Currently this is a GUID and is automatically generated. In the case of a hosted deployment, the root domain (mydomain.com in the above scenario) is always SharePoint.com.

Explore App Solution Structure

Once you have set up your VM for SharePoint 2013, open Visual Studio 2012 and create a new project using template “Apps for SharePoint 2013” for creating apps for SharePoint.


Provide the name of the SharePoint app, the SharePoint which you will use for debugging and select the option where you would like to host SharePoint app. For this post, we will select “SharePoint-hosted” as shown in screenshot below:


The following screenshot shows a new project created from “Apps for SharePoint 2013” template in Project Explorer and illustrates its structure.


App Manifest
Any app for SharePoint (be it SharePoint hosted or cloud hosted) includes an appmanifest.xml file. The appmanifest.xml defines the high level app’s attributes like the title, internal name, icon path and version of the app. The most important item specified in the app manifest is the URL of the start page, which is the page that opens when the app is started.

If app needs to access any SharePoint resources outside the app web, then requests for permission is also defined in the app manifest via Permissions tab. You can also define a list of the prerequisites in app manifest, if any, that must be available to the app in order for the app to be installed. For example, certain features may need to be installed and activated, and certain services may need to be licensed and installed. You can right click on app manifest and select “view code” to view the details:

Notice that with start page, there is a dynamic token prefix as ~appWebUrl, and SharePoint will replace this dynamic token at runtime depending on which site the app is installed. App Principal is needed for identification, for authentication and authorization purposes, of the app. For SharePoint hosted app, App Principal will always be internal as SharePoint is going to track the identity of the app internally and does not need any outside help.
Default.aspx (i.e. Default Start Page)
Once you open the default start page of the SharePoint hosted app (i.e. default.aspx), you’ll find that Visual Studio automatically adds two content place holders  in it i.e. PlaceHolderAdditionalPageHead and PlaceHolderMain. Inside of PlaceHolderAdditionalPageHead, Visual Studio automatically adds the jQuery libraries and link to app.css and app.js. You can directly start adding styles for default.aspx in app.css and can add scripts in app.js.

A SharePoint hosted app can have many pages, it’s just the template provides you with the default start page. You can add as many pages or script files or CSS.  
Hello World SharePoint Hosted App
Without making any code modifications in above project, if you right click on the project, and select “deploy”, it will deploy the app to SharePoint site. You can also change the site URL to deploy the app to your O365 tenant site collection. You can go
to site content and clicking on the app “My First SharePoint App” will open up the default page of the app as shown below.
 
The hello world app “My First SharePoint App” deployed above displays the name of the logged in user. This name is fetched using the SharePoint 2013 Client Side Object Model (CSOM) via JavaScript. CSOM can be used using JavaScript or by using code behind files. Since in SharePoint-hosted app, any server side code is not allowed, thus SharePoint content can be accessed using the following ways:
  1. Using client side object model via JavaScript
  2. Calling REST based APIs via JavaScript
In the above hello world app, the logged in user’s name is fetched using the following CSOM code in App.js:


Debugging SharePoint-Hosted App via F5

Once you’re done with the development of your app, you can directly hit the F5 key, its going to package your source files to install the SharePoint app on the target test site. Visual Studio then starts a session of IE, and direct you to the start page of the page, Also, note when you close the session of IE, Visual Studio starts the uninstallation and retraction process of app from the target SharePoint site. Please note that when you hit F5, Visual studio attaches the JavaScript debugger as well to IE, because of which you can directly debug the JavaScript files inside Visual Studio. However, if you would like to use JavaScript debugger built into IE (i.e. IE Developer Tools), just use Ctrl F5 instead of F5.

Sharepoint 2013 Apps hosting - Part 3

Có hai kiểu tùy chọn cho hosting Apps:
  • Sharepoint-hosted
  • Cloud-hosted
    • Provider-hosted
    • Auto-hosted
 Sharepoint-hosted Apps:





Sharepoint-hosted apps chạy trong ngữ cảnh của SP, không có server-side code. Tất cả business chạy trên client, sử dụng javascript. Bạn có thể kế thừa các thành phần SP sẵn có: lists, document libraries, pages mà không cần đến code-behind.

Cloud-hosted Apps:


Logic được thực hiện bên ngoài SP, giao tiếp với SP thông qua CSOM hoặc REST services và phải được phân quyền thông qua OAuth.


Giới thiệu mô hình Sharepoint 2013 Apps (Add-Ins) - Part 2

Một số điểm chính:
  • Mọi thứ trên Sharepoint bây giờ là Apps
  • Không tùy biến mã nguồn trên Sharepoint server
  • Dễ dàng nâng cấp các phiên bản
  • Giảm nặng nề về môi trường cho các nhà phát triển
  • Triển khai và cài đặt Apps trên nhiều môi trường
  • Apps là một tùy chọn (không phải thay thế) các mô hình phát triển cũ (Fully trusted solutions, Sandboxed solutions)
Bảng so sánh


Farm Solutions
Sandboxed Solutions
SharePoint Apps
Khi nào cần phát triển

Sử dụng farm solutions chỉ khi bạn không thể thỏa mãn yêu cầu với Apps
Giải pháp Sandboxed  không được khuyến khích trong phiên bản Sharepoint 2013 nhưng nó vẫn có thể được càn đặt vào site collections.
Được khuyến khích là giải pháp đầu tiên nghĩ đến nếu nó có thể giải quyết yêu cầu.
Sử dụng server-side API
Cho phép nhà phát triển có thể viết code để sử dụng server-side API Server-side code có thể được thực thi dưới một chính sách giới hạn. Ngăn cấm hoàn toàn việc thực thi code server-side trong Apps. Mọi code server-side cần được thực thi và host bên ngoài Sharepoint server, trong các hệ thống trung gian
Sử dụng Client-Side API


Có, khả năng hỗ trợ như các phiên bản trước
Triển khai, cài đặt Mã tùy biến được biên dịch và triển khai trong thư mục BIN hoặc GAC.
Có thể được đóng gói và tải lên. Có một số giới hạn/khó khăn khi sử dụng dữ liệu ở các thành phần khác. Dễ dàng
Hosted Deployment and Cloud support
Không hỗ trợ
Sandboxed solutions are the only type of solution that can be deployed to hosted SharePoint installations.
Có. Thậm chí dễ dàng chia sẻ các Apps để cài đặt lên các hệ thống khác nhau.
Install/Upgrade/Uninstall
Làm thủ công
Làm thủ công
Dễ dàng cài đặt và gỡ bỏ
Server Outages
Ảnh hưởng tới toàn bộ hệ thống Chạy độc lập và ít ảnh hưởng hơn
Hoàn toàn độc lập và không ảnh hưởng tới các thành phần khác của hệ thống
Authentication Options
Các thành phần chạy dưới chế độ full trust.
Các thành phần chạy dưới chế độ partial trust.



Trước khi bạn gọi SharePoint APIs từ app, bạn cần chứng thực với Sharepoint. Cơ chế chứng thực bạn sử dụng tùy thuộc vào khu vực cài đặt app: 
  • Bên trong Sharepoint: Bạn sửu dụng HTML, Js và cơ chế chứng thực sẽ làm giúp bạn.  
  • Với môi trường Cloud:   
    • Sử dụng client-side code với thư viện cross-domain.
    • Sử dụng server-side code với OAuth
    • REST APIs
 
Có thể phát triển những gì
Hầu như tất cả
Một vài cái mà sandbox không hỗ trợ
  • Kết nối tới tài nguyên không nawmgf trong farm.
  • Truy cập database
  • Gọi unmanaged code
  • Ghi vào đĩa cứng  
  • Truy cập tài nguyên trong site khác
Có thể:
  • Tùy biến Web Parts   
  • Nhận sự kiện
  • Tùy biến trường dữ liệu
  • Tùy biến web services trên SP Service Application Framwork Application pages 
Không thể
  • Tùy biến site
  • Tùy biến themes
  • Tùy biến hành động groups và tùy biến hành động ẩn trong User Control (ascx file)
  • Delegate controls

Khái niệm Apps (add - ins) trong Sharepoint 2013 - Part 1

Trong các phiên bản trước Sharepoint 2013 đã có rất nhiều khái niệm đặc thù như (pages, lists, libraries, sites, web parts, master pages...). Nó khá phức tạp cho người mới bắt đầu tiếp cận Sharepoint. Đôi khi người dùng cảm thấy lẫn lộn giữa các thành phần được hiển thị ở phần ribbon và điều hướng (navigation). Lý do dẫn đến việc này là Sharepoint được dùng với quá nhiều mục đích nên thói quen làm việc với ứng dụng web trên Sharepoint rất khác so với các ứng dụng web khác. Với phiên bản mới Sharepoint 2013, Microsoft muốn tạo ra các khái niệm dễ dàng hơn cho người dùng.

Tại sao cần thiết Apps (Add Ins)
Trong các công nghệ web mới, gadgets, smart phone... đang ngày càng phổ biến, người dùng dần quen thuộc với các khái niệm như: Sites, People, Apps, Themes. Phiên bản Sharepoint 2013 chủ yếu tập trung trên 4 khái niệm chính đó (Sites, People, Apps, Themes) để người dùng dễ dàng sử dụng và cảm thấy quen thuộc.
Với người dùng cuối, các khái niệm này được mô tả ngắn gọi như sau:
  • Sites: Một nơi lưu trữ các nội dung (pages, documents, list items)
  • People: Cho phép người dùng truy cập các nội dung và trao đổi với người dùng khác trong cùng một không gian làm việc cộng tác (collaboration)
  • Apps: Cung cấp chức năng cho site. Nó có thể là mọi thứ: web part, document library,...
  • Themes: Nâng cao khả năng trình bày nội dung trong site (look and feel)
Trong Sharepoint 2010, đã có 3 trong 4 khái niệm trên (Site, People, Themes). Nhưng chưa có khái niệm Apps - cung cấp những chức năng riêng biệt mà người dùng đã khá quen thuộc như khi sử dụng các nền tảng khác (phone, tablet). Thiếu sót này cần được khắc phục cho phù hợp với xu thế mới.

Thách thức với Sharepoint 2010
Đã có một số vấn đề thấy được trên SP 2010, sự mất ổn định khi hoạt động trên farm và rất khó để migrate lên phiên bản mới. Giải pháp Sharepoint farm yêu cầu triển khai đóng gói. Có rất nhiều mã nguồn được phát triển trên SP2010 server, và nếu nó không được viết tốt, sẽ vô cùng khó khăn để migrate.
Một phương án để cố gắng giải quyết tình huống này là sử dụng giải pháp sandbox, nhưng nó thật sự có những giới hạn của riêng nó và thật tế cũng ít khách hàng sử dụng giải pháp này một cách trơn tru.

Mô hình Sharepoint 2013 Apps
Mô hình mới trong Sharepoint 2013 không chỉ loại bỏ vấn đề giải pháp đóng gói, tùy biến mã nguồn trên server mà còn giới thiệu nhiều tính năng cải tiến mới.
Sharepoint 2013 Apps không được triển khai trên server, IIS hay Azure mà trên phía client. Apps được phân quyền thông quan OAuth và giao tiếp với Sharepoint thông qua REST APIs hoặc CSOM (Client Side Object Model)
Các nhà phát triển có thể xuất bản Apps của họ lên trên market để mọi người có thể mua và tải về dùng.