Tải bản đầy đủ (.pdf) (72 trang)

Làm chủ việc phát triển ứng dụng Facebook bằng PHP, IBM Rational Application Developer, IBM WebSphere Application Server và DB2, Phần 3: Hoàn thành ứng dụng trình diễn môi giới chứng khoán Facebook doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (422.08 KB, 72 trang )

Làm chủ việc phát triển ứng dụng Facebook bằng PHP, IBM Rational
Application Developer, IBM WebSphere Application Server và DB2, Phần 3:
Hoàn thành ứng dụng trình diễn môi giới chứng khoán Facebook
Jake Miles, Tác giả tự do, 软通动力信息技术有限公司
Tóm tắt: Đây là phần cuối cùng trong loạt bài hướng dẫn ba phần về phát triển
một ứng dụng Facebook đầy đủ chức năng trong các ngôn ngữ PHP và Java™ để
cung cấp một giao diện Facebook cho một ứng dụng buôn bán môi giới cổ phiếu
hiện có. Trong hướng dẫn này bạn sử dụng tất cả các công cụ mà bạn đã cài đặt và
các thành phần bạn đã phát triển trong hai phần đầu của loạt bài này để thực hiện
các chi tiết của ứng dụng Facebook.
Trước khi bạn bắt đầu
Hướng dẫn này dành cho các nhà phát triển có trình độ kinh nghiệm khác nhau
trong Java, PHP hoặc cả hai, những người muốn gia nhập vào thế giới đang lên
của sự phát triển ứng dụng Facebook. Nó cũng dành cho các nhà phát triển nào
muốn tìm hiểu cách tích hợp PHP và Java vào chung một ứng dụng.
Về loạt bài này
Loạt bài này sẽ cho phép bạn phát triển các ứng dụng Facebook của chính mình và
làm như vậy bên trên đỉnh của một ứng dụng Java doanh nghiệp hiện có.
 Trong Phần 1 bạn đã có một cái nhìn khái quát về Facebook và sau đó cài
đặt các công cụ cần thiết gồm cả môi trường Rational của IBM (Rational®
Application Developer environment), Zend Core for IBM® với các bản cài
đặt kèm theo của Apache 2 và cơ sở dữ liệu DB2® Express-C và
WebSphere® Application Server của IBM. Sau đó bạn khảo sát chi tiết các
điểm tích hợp của Facebook các cơ chế mà Facebook cung cấp để tích
hợp ứng dụng vào mạng xã hội và bắt đầu một số phát triển khung sườn.
 Trong Phần 2 bạn đã tạo ra một dự án ứng dụng web Java™ trong Rational
Application Developer của IBM, sau đó tích hợp khung Spring để áp đặt
một cấu trúc MVC trên mã lệnh và cung cấp việc tiêm vào thuộc tính/bean,
và bạn đã triển khai ứng dụng vào WebSphere.
 Phần 3 đảm nhiệm các chi tiết triển khai thực hiện một ứng dụng Facebook
đầy đủ chức năng bằng cách sử dụng Ngôn ngữ Đánh dấu Facebook


(FBML), Facebook JAVASCRIPT (FBJS), và Facebook API trong cả Java
và PHP.


Về hướng dẫn này
Trong hướng dẫn này, bạn sẽ sử dụng tất cả các công cụ bạn đã cài đặt và các
thành phần mà bạn đã phát triển để thực hiện chi tiết ứng dụng Facebook. Ứng
dụng này sẽ bao gồm trang vải nền (canvas) chính hiển thị danh mục đầu tư cổ
phiếu của người sử dụng (và các cổ phiếu có sẵn khác), một hộp lược tả hiển thị
tin điện báo giá thị trường chứng khoán (stock ticker) trong danh mục đầu tư đó,
khả năng mua và bán số lượng cổ phiếu từ trang vải nền, và khả năng giới thiệu cổ
phiếu cho bạn bè trên Facebook. Bạn sẽ sử dụng cả thư viện trình khách Facebook
Java và PHP để giao tiếp với Facebook thông qua giao diện REST của nó từ bên
trong các trình điều khiển PHP và Java của bạn, bằng cách sử dụng phiên bản mã
nguồn mở của thư viện trình khách Java được chứa trên kho mã Google, gồm cả
Tiện ích Bạn bè (Companion Utility) mới để tạo kết nối với Facebook dễ dàng như
trong PHP. Sau đó bạn sẽ dùng FBML để tạo ra nội dung Facebook, và FBJS và
giao diện AJAX của Facebook để cập nhật giá cổ phiếu trong danh mục đầu tư và
tổng giá trị của danh mục đầu tư trong thời gian thực, mỗi giây một lần.


Các đều kiện tiên quyết
Bạn cần đọc Làm chủ việc phát triển ứng dụng Facebook, Phần 1 (Mastering
Facebook application development, Part 1) và Sử dụng song song các ngôn ngữ
Java và PHP, Phần 2 (Using Java and PHP languages in parallel, Part 2) trước khi
tiếp tục với Phần 3.


Yêu cầu về hệ thống
Để hoàn thành các bước trong hướng dẫn này, bạn cần các công cụ sau:

 Spring Framework Tôi sử dụng phiên bản 2.5.3, bản phát hành mới nhất.
 Rational Application Developer (Bộ Phát triển ứng dụng Rational) Nhận
một phiên bản dùng thử của RAD 7.0.0.6 từ IBM (nhấn vào liên kết “Tải về
bằng cách sử dụng IBM Installation Manager mới (khuyến cáo)”). Bạn sẽ
sử dụng bộ Rational Application Developer như là một bản IDE đầy đủ tính
năng dựa trên Eclipse để phát triển ứng dụng Web Java của bạn.
 IBM WebSphere Application Server V6.1.
 Zend Core For IBM (gồm cả IBM DB2 Express-C).
 Zend Studio là một công cụ tuyệt vời để viết mã PHP, mặc dù có thể dùng
trình soạn thảo văn bản nào cũng được.
 Thư viện thẻ JSON JSP.
 Facebook-java-api lưu trên Google Code, gồm cả Companion Utility.
Tạo một nguồn cấp JSON giá cổ phiếu trong Java
Trang vải nền của ứng dụng của bạn sẽ hiển thị danh mục đầu tư chứng khoán của
người sử dụng và các chứng khoán có sẵn khác, và sẽ cập nhật giá cả của những
cổ phiếu đó mỗi giây một lần bằng cách sử dụng AJAX. Vì vậy bước đầu tiên
trong phần này sẽ là cung cấp dữ liệu JSON này. Cần giả thiết rằng chức năng giá
cổ phiếu đã có sẵn trong ứng dụng môi giới cổ phiếu rồi (viết bằng Java), do đó
bạn sẽ cung cấp nguồn cấp JSON này từ một trình điều khiển chạy trong IBM
WebSphere.
Sử dụng StockListController.java để cung cấp giá cổ phiếu
Để bắt đầu trước tiên bạn phải sửa đổi phương thức handleRequests() trong
StockListController.java, như Liệt kê 1, như vậy bạn sẽ được cung cấp một số giá
cổ phiếu.

Liệt kê 1. Sửa đổi lớp StockListController (Java) để cung cấp giá cổ phiếu

public ModelAndView
handleRequest(HttpServletRequest request,
HttpServletResponse response) throws

Exception {
List<Stock> stocks = getDao().fetchAllStocks();
for (Stock stock : stocks) {
stock.setPrice
(getStockPriceSource().getPriceInCents(stock.getId()));

}

return new ModelAndView (getSuccessView(),
"stocks", stocks);
}



Sử dụng một lớp StockPriceSource để mô phỏng sự biến động của giá cổ phiếu
Thay vì chỉ cung cấp các chứng khoán cho khung nhìn khi được tìm nạp từ DAO,
StockListController bây giờ gọi một đối tượng StockPriceSource để lấy giá cả của
từng cổ phiếu, vì giá cả này thay đổi theo thời gian thực, đối lập với được cho theo
cơ sở dữ liệu. Một cuộc môi giới chứng khoán thực sự sẽ triển khai thực hiện lớp
StockPriceSource để lấy ra giá chứng khoán từ một nguồn dữ liệu ở đâu đó, có độ
an toàn cao và theo đặc thù của ngành công nghiệp. Tuy nhiên ứng dụng này sẽ
mô phỏng biến động giá cổ phiếu bằng một lớp StockPriceSource chứa một ánh xạ
“tin điện báo cổ phiếu với mức giá” (stock ticker to price), và mọi yêu cầu về giá
của một cổ phiếu sẽ cập nhật giá đó trong ánh xạ này, thay đổi nó lên xuống một
cách ngẫu nhiên trong biên độ thay đổi lập sẵn (xem mã kèm theo trong phần Tải
về để biết thêm chi tiết).
Để cung cấp StockPriceSource cho StockListController, sửa đổi các định nghĩa
bean của StockListController trong spring-servlet.xml và cung cấp một định nghĩa
bean mới cho đối tượng StockPriceSource, như Liệt kê 2.


Liệt kê 2. Cung cấp cho StockListController một StockPriceSource trong
spring-servlet.xml

<bean id="stockPriceSource"
class="com.jm.fbstockdemo.StockPriceSource">
<property name="volatility" value="50"/>
<property name="startPrice" value="5000"/>
<property name="minPrice" value="500"/>
<property name="maxPrice" value="10000"/>
</bean>

<bean id="stockListController"
class="com.jm.fbstockdemo.StockListController">

<property name="dao" ref="stocksDao"/>
<property name="stockPriceSource"
ref="stockPriceSource"/>
<property name="successView">
<value>stockList.jsp</value>
</property>
</bean>

Thuộc tính của bean stockPriceSource cấu hình hành vi của nó: tất cả các cổ phiếu
bắt đầu với giá 5000 cent ($50), có thể thay đổi đến 50 cent mỗi tích tắc (thuộc
tính volatility ), và không được phép rớt giá xuống dưới $5 hoặc lên trên $100
trong dải biến thiên ngẫu nhiên của chúng theo thời gian. Thuộc tính
stockPriceSource trên bean stockListController cung cấp cho stockListController
một cá thể stockPriceSource có phạm vi trên toàn ứng dụng. Vì StockPriceSource
là một bean, cùng một cá thể như vậy sẽ vẫn nằm trong bộ nhớ cho đến khi ứng
dụng web hoặc IBM WebSphere được khởi động lại, và như vậy biến thiên giá cổ

phiếu sẽ vẫn ổn định trong trang vải nền Facebook cho đến khi ứng dụng còn đang
chạy.


Sử dụng thư viện thẻ JSP JSON để tạo ra nguồn cấp JSON
Bây giờ bạn đã có một nguồn cổ phiếu và giá cả của chúng được mô phỏng theo
thời gian thực, hãy cung cấp thông tin này như là dữ liệu JSON cho các lần gọi
Javascript AJAX mà sẽ chạy trong trang vải nền. JSON (ký pháp đối tượng
JavaScript), đặc tả của nó hiện có tại là một định dạng thay
thế cho XML để chuyển dữ liệu đối tượng, và đang trở thành được ưa thích đối với
dữ liệu AJAX. Nó cô đọng hơn (do đó truyền tải nhanh hơn), cung cấp một ký
pháp dễ hiểu cho các thuộc tính của một đối tượng (trái ngược với sự pha trộn của
các thuộc tính và các thẻ con của XML), và không như XML cung cấp một cấu tạo
rõ ràng để biểu thị một danh sách các mục. Các tính năng này làm cho nó nhanh
hơn, đơn giản, và không nhập nhằng khi chuyển dữ liệu JSON thành các đối tượng
trong một ngôn ngữ như Javascript mà hỗ trợ các đối tượng và mảng.
Tuy nhiên, các khung nhìn của ứng dụng là JSPs, và các JSP gồm cả XML, nên sử
dụng một thư viện thẻ JSP cho phép bạn dựng nên các đối tượng bằng cách sử
dụng XML, trong khi các thẻ biểu hiện dữ liệu đối tượng ở định dạng JSON. Để
làm điều đó, hãy sử dụng thư viện thẻ JSON JSP sẵn có tại http://json-
taglib.sourceforge.net/index.html. Tải về json-taglib JAR vào thư mục WEB-
INF/lib của bạn. Sau đó sửa đổi stockList.jsp khung nhìn được
StockListController biểu hiện để cung cấp dữ liệu dưới dạng JSON, như Liệt kê
3.

Liệt kê 3. Sử dụng thư viện thẻ JSON JSP để biểu hiện nguồn cấp giá cổ
phiếu JSON

<%@ page contentType="text" %>
<%@ taglib prefix="c"

uri=" %>
<%@ taglib prefix="json"
uri=" %>

<json:object>
<json:array name="stocks">
<c:forEach items="${stocks}"
var="stock">
<json:object>
<json:property
name="id"><c:out
value="${stock.id}"/></json:property>
<json:property
name="ticker"><c:out
value="${stock.ticker}"/></json:property>

<json:property
name="price"><c:out
value="${stock.price}"/></json:property>

</json:object>
</c:forEach>
</json:array>
</json:object>

Một đối tượng JSON gồm có các cặp tên/giá trị, trong đó một giá trị có thể là giá
trị kiểu nguyên thủy như một chuỗi ký tự, một đối tượng JSON khác, hoặc một
mảng JSON. Trong stockList.jsp, thẻ <json:object> tạo ra một đối tượng JSON
như là vỏ bọc bậc cao nhất của nó. Nhãn <json:array> tạo ra một thuộc tính của
đối tượng bậc cao nhất gọi là stocks là một mảng của các đối tượng JSON, trong

trường hợp này là cổ phiếu. JSP lặp qua các cổ phiếu do StockListController cung
cấp để xây dựng nên mảng JSON, tạo ra một đối tượng JSON cho mỗi cổ phiếu,
mỗi cái với một mã nhận dạng (id), tin điện báo (ticker) và thuộc tính giá cả
(price).
Chú ý rằng contentType ở đây là text (văn bản) nên bạn có thể xem các kết quả
trong một trình duyệt và gỡ lỗi Javascript dễ dàng hơn, nhưng một cách khác nó
có thể là “text/json”. Cũng lưu ý rằng bạn không thể bao gồm các chú thích <!
xml comments > trong JSP này, vì mặc dù chúng sẽ bị bỏ qua nếu đầu ra là
XML, nhưng chúng sẽ được diễn giải như là dữ liệu hỏng khi kết quả được diễn
giải như là JSON.
Để kiểm tra nguồn cấp JSON của giá cả cổ phiếu, hãy triển khai lại ứng dụng Web
lên WebSphere (như trong Phần 2 của hướng dẫn này), di chuyển đến
http://localhost/fb_stock_demo/stockList trong trình duyệt của bạn, và bạn sẽ thấy
các cổ phiếu và giá cả của chúng ở định dạng JSON. Tải lại trình duyệt và giá cả
cổ phiếu trong dữ liệu JSON sẽ thay đổi, vì StockPriceSource sẽ thay đổi giá cả
của chúng với mỗi yêu cầu.
Xem nguồn cấp JSON này đang hoạt động khi bạn thực hiện việc gọi ra AJAX
trong FBJS của trang vải nền (Facebook JavaScript). Tuy nhiên, trước khi bạn đến
đó bạn cần phải nhận ra người sử dụng Facebook đang xem trang danh mục đầu tư
(portfolio page), do đó hãy chuyển sự chú ý của bạn trở lại phía bên PHP của ứng
dụng để kết nối với Facebook và nhận dạng người sử dụng Facebook trong cơ sở
dữ liệu DB2 của bạn.

Kết nối với ứng dụng và với Facebook trong PHP
Bây giờ hãy thực hiện trang vải nền của ứng dụng, gồm cả việc kết nối với
Facebook và nối kết người sử dụng Facebook với mã nhận dạng của họ trong cơ
sở dữ liệu DB2 IBM, và thực hiện trang danh mục đầu tư chính của người sử
dụng, dùng nguồn cấp JSON.
Sửa đổi URL gọi lại để sử dụng tập tin .htaccess
Trong Phần 1 của hướng dẫn này bạn đã sử dụng một tệp index.php đơn giản để

kiểm tra cấu hình ứng dụng Facebook. Do bạn đã bổ sung hoàn thiện cơ sở hạ tầng
và đang sử dụng tập tin .htaccess để gửi đi các yêu cầu, bạn cần phải thay đổi URL
gọi lại của ứng dụng trong thiết lập của ứng dụng. Trong Facebook, nhấn vào ứng
dụng Applications ngay bên dưới hộp tìm kiếm (Search box). Trong ứng dụng
Applications bạn có thể nhìn thấy toàn bộ các ứng dụng được cài đặt của bạn.
Nhấn vào ứng dụng Developer nó chứa một danh sách các ứng dụng mà bạn là
nhà phát triển, hiển thị dưới dạng một danh sách nằm ở phía bên phải (xem Hình
1).

Hình 1. Danh sách ứng dụng của bạn trong ứng dụng Developer

Nhấn vào tên ứng dụng của bạn để xem trang thiết lập của nó, nhấn Edit Settings,
và đổi Callback URL thành http://SERVER/fb_stock_demo/, thay SERVER bằng
URL của máy chủ web Apache 2 ở xa của ứng dụng của bạn. Nếu bạn đặt
Callback URL như trong Phần 1, việc này chỉ đòi hỏi loại bỏ tên tệp index.php
khỏi phần cuối của URL.


Sửa đổi .htaccess để hỗ trợ ứng dụng đầy đủ
Do trang vải nền của bạn trỏ đến thư mục fb_stock_demo, được điều quản bởi
RewriteRules, của tập tin .htaccess, hãy sửa đổi .htaccess như trong Liệt kê 4 để
cung cấp tất cả các quy tắc cần thiết để hoàn tất ứng dụng.

Liệt kê 4. Tập tin .htaccess đầy đủ

RewriteEngine on

# php dispatcher request
RewriteCond
%{QUERY_STRING} (.*)

RewriteRule ^php/(.*)
index.php?controller=$1&%1
[last]

# index
RewriteRule ^$
php/defaultCanvas [next]

# php actions
RewriteRule ^login$ php/login
[next]
RewriteRule ^portfolio$
php/portfolio [next]
RewriteRule
^recommendStockToFriends$
php/recommendStockToFriends
[next]

# java actions
RewriteRule ^tradeStock$
java/tradeStock [next]

RewriteRule ^stockList$
java/stockList [next]


RewriteRule đầu tiên định tuyến tất cả các yêu cầu có tiền tố “php/” đến index.php
như trong Phần 2 của hướng dẫn này. Quy tắc tiếp theo tiến hành so khớp
Callback URL nhưng không có phần đường dẫn tiếp theo được xác định, và nó uỷ
quyền cho yêu cầu PHP defaultCanvas. Các hành động PHP khác hoạt động tương

tự, và các hành động Java hiện nay bao gồm cả một yêu cầu tradeStock mà bạn sẽ
triển khai thực hiện sau trong hướng dẫn này.


Sửa đổi app.properties
Trong Phần 2 bạn đã phát triển lớp ActionDispatcher nó định tuyến các yêu cầu
đến các lớp của trình điều khiển bằng cách sử dụng các tệp thuộc tính trong lớp
Injectable. Để cung cấp cho trình điều khiển các ánh xạ định nghĩa trong tập tin
.htaccess mới, hãy sửa đổi app.properties (trong thư mục conf, dưới thư mục
fb_stock_demo, là nơi chứa tệp .htaccess) như Liệt kê 5.

Liệt kê 5. Tập tin app.properties đầy đủ

ActionDispatcher/defaultCanvas=DefaultCanvasController
ActionDispatcher/login=LoginController
ActionDispatcher/portfolio=PortfolioController
ActionDispatcher/recommendStockToFriends=RecommendStockToFriendsContro
ller

AbstractStockDemoFacebookController/facebook_api_key=[YOUR FACEBOOK
API_KEY]
AbstractStockDemoFacebookController/facebook_secret=[YOUR FACEBOOK
SECRET]
AbstractStockDemoFacebookController/facebookAppUrl=
m/
[YOUR CANVAS PAGE URL] AbstractStockDemoFacebookController/siteUrl=

http://[YOUR SERVER URL]/fb_stock_demo

DefaultCanvasController/loggedInForward=portfolio

DefaultCanvasController/loginView=loginView.php

LoginController/alreadyHasUserForward=portfolio
LoginController/validUserForward=portfolio
LoginController/invalidUserView=loginView.php

Vào thời điểm này, dòng đầu tiên là hệ trọng nhất, bởi vì nó sẽ ánh xạ khoá của
trình điều khiển defaultCanvas (được cung cấp bởi quy tắc viết lại trong .htaccess)
đến lớp DefaultCanvasController sao cho lớp ActionDispatcher sẽ tạo ra một cá
thể DefaultCanvasController và cho chạy nó khi có người truy cập trang vải nền
của ứng dụng của bạn. Các thuộc tính khác sẽ trở nên hữu ích khi bạn thực hiện
phần còn lại của ứng dụng.


DefaultCanvasController
DefaultCanvasController xử lý các yêu cầu được gửi tới trang vải nền của ứng
dụng Facebook (mà không có URI phụ), và cần để xử lý hai khả năng. Một khả
năng là, nếu đây là lần đầu tiên người sử dụng truy cập trang vải nền của ứng dụng
này, có nghĩa là bây giờ họ chỉ vừa mới thêm ứng dụng vào. Khi họ truy cập lần
đầu tiên, bạn có được mã nhận dạng người sử dụng Facebook vì Facebook gửi nó
trong yêu cầu, nhưng bạn còn chưa biết người sử dụng facebook này là ai về mặt
môi giới chứng khoán, nghĩa là tên người sử dụng là gì theo hệ thống hiện hành, vì
vậy bạn cần đến chúng để đăng nhập và thiết lập liên kết đó. Khả năng thứ hai là
trường hợp người sử dụng đã đăng nhập vào hệ thống, trong trường hợp này họ có
thể bỏ qua màn hình đăng nhập tuỳ chỉnh của bạn và xem danh mục đầu tư của họ.
Trong trường hợp đầu, DefaultCanvasController biểu hiện khung nhìn đăng nhập
tùy chỉnh của ứng dụng, và trong trường hợp thứ hai, nó chuyển điều khiển đến
PortfolioController (mà bạn sẽ thực hiện sau đây), như Liệt kê 6.

Liệt kê 6. Lớp DefaultCanvasController


class DefaultCanvasController extends
AbstractStockDemoFacebookController
{

public function __construct() {
parent::__construct(false);
}

protected function
executeFacebookRequest() {
return $this->user
? new ControllerForward ($this-
>loggedInForward)
: new ModelAndView ($this-
>loginView);
}
}

DefaultCanvasController Chuyển giao kết quả là false đến hàm tạo của lớp cha,
chỉ rõ rằng không yêu cầu người sử dụng đã được đăng nhập vào hệ thống môi
giới chứng khoán. Thuộc tính loginView được thêm vào từ app.properties và
tương ứng với loginView.jsp. loggedInForward cũng được thiết lập trong
app.properties, và nó xác định rõ khoá của trình điều khiển “portfolio”, ánh xạ đến
lớp PortfolioController (tham khảo liệt kê mã lệnh của app.properties để biết các
giá trị khoá khác nhau được ánh xạ vào).
Trong trường hợp đầu, khi mà người sử dụng lần đầu tiên thêm ứng dụng
Facebook và cần đăng nhập vào môi giới chứng khoán, loginView.jsp là một trang
đăng nhập đơn giản (xem Liệt kê 7) mà sau đó được hiển thị như trang vải nền của
ứng dụng của bạn (xem Mã nguồn để có toàn bộ tập tin).


Liệt kê 7. Thẻ form trong loginView.php


<form method="post" action="login">
<p>
<span
class="label">Username:</span><input
name="username"/><br/>
<span
class="label">Password:</span><input
name="password"
type="password"/><br/>
</p>
<input type="submit"
value="Submit"/>
</form>

Đây thực sự là FBML, mặc dù nó không sử dụng bất kỳ thẻ FBML đặc trưng
Facebook nào. Chú ý rằng hành động (action) của biểu mẫu liên quan đến
Callback URL của ứng dụng; Facebook uỷ nhiệm yêu cầu post tới máy chủ của
bạn. Lớp LoginController xử lý yêu cầu post (gửi dữ liệu) đăng nhập (xem Mã
nguồn để biết thêm chi tiết), bằng cách chèn thêm vào một hàng trong bảng
facebook_user, liên kết mã nhận dạng người sử dụng facebook của người sử dụng
với ID nhà kinh doanh môi giới chứng khoán của họ.


Thực hiện một trình điều khiển cơ sở chung
Do tất cả các trình điều khiển, ngoại trừ LoginController đều yêu cầu rằng người
sử dụng Facebook được nhận biết trong hệ thống môi giới chứng khoán, và do tất

cả các trình điều khiển này sẽ yêu cầu một kết nối với trình khách Facebook, sẽ
hữu ích nếu sử dụng một lớp cơ sở chung, kết nối với Facebook và tìm kiếm người
sử dụng trong cơ sở dữ liệu trước khi thực hiện các chi tiết của yêu cầu đó. Để làm
điều này, hãy thực hiện lớp điều khiển cơ sở
AbstractStockDemoFacebookController, như Liệt kê 8.
Liệt kê 8. Lớp AbstractStockDemoFacebookController (PHP)

abstract class AbstractStockDemoFacebookController
extends AbstractStockDemoController {

protected $facebook = null;
private $requiresUser;
protected $user = null;

public function __construct($requiresUser = true) {
parent::__construct();
$this-
>addPrefix('AbstractStockDemoFacebookController');

$this->requiresUser = $requiresUser;
}

public function executeSpecific() {

$this->facebook = new StockDemoFacebookClient
($this->facebook_api_key,
$this->facebook_secret);

$this->user = $this->dao->fetchUserByFacebookId


($this->getFacebookUserId());

if ($this->user == null && $this->requiresUser) {
throw new Exception
("AbstractStockDemoFacebookController
no matching user found in stocks database.");
}

return $this->executeFacebookRequest();
}

protected function getFacebookUserId() {
return $this->facebook->user;
}

protected function getUser() {
return $this->user;
}

protected abstract function
executeFacebookRequest();
}

Hãy nhớ lại rằng ActionDispatcher sẽ tạo ra một cá thể của trình điều khiển thích
hợp, thiết lập đối tượng Properties của nó từ tệp tin thuộc tính, và gọi ra phương
thức execute() của nó. Lớp AbstractStockDemoFacebookController mở rộng lớp
AbstractStockDemoController, mà phương thức execute() của lớp này sẽ kết nối
với cơ sở dữ liệu IBM DB2, đưa ra một thông báo lỗi nếu không kết nối được, và
gọi phương thức trừu tượng executeSpecific(). Mã triển khai thực hiện phương
thức executeSpecific() của lớp AbstractStockDemoFacebookController tạo ra một

cá thể StockDemoFacebookClient (mà bạn sẽ thực hiện tiếp theo) để kết nối với
Facebook và xác nhận rằng người sử dụng đã đăng nhập vào ứng dụng Facebook.
Sau đó nó tìm kiếm người sử dụng Facebook trong cơ sở dữ liệu thông qua
StocksDAO, nhận được đối tượng User liên kết mã nhận dạng Facebook của họ
với ID người sử dụng nhà kinh doanh cổ phiếu của họ. Nếu người sử dụng
Facebook không tương ứng với một người sử dụng trong cơ sở dữ liệu, lớp này
huỷ bỏ bằng một lỗi ngoại lệ (Exception), trừ phi hàm tạo của lớp con chuyển tới
kết quả là false dành cho cờ báo $requiresUser chỉ có DefaultCanvasController
làm việc này vì nó cần có khả năng điều phối LoginController dành cho đăng nhập
ban đầu.


Tạo một lớp bọc xung quanh trình khách Facebook PHP
Để bao kín các lần gọi ban đầu đến Facebook và cung cấp các phương thức đặc
thù cho ứng dụng mà chính nó cũng bao gói các lần gọi đến trình khách Facebook,
hãy tạo lớp StockDemoFacebookClient như trong Liệt kê 9.

Liệt kê 9. Lớp StockDemoFacebookClient (PHP)

class
StockDemoFacebookClient
extends Facebook {

public function
__construct($apiKey,
$secret) {

parent::__construct
($apiKey, $secret);


$this->require_frame();
$this->require_install();
$this->require_login();
}
}

Đây cũng là mã mà bạn trông thấy trong Phần 1 của hướng dẫn, trong tệp
index.php khung sườn bạn đã sử dụng để kiểm tra kết nối giữa Zend Core for IBM
với các máy chủ của Facebook. Khi AbstractStockDemoFacebookClient tạo ra
một cá thể của đối tượng khách này nó sẽ kết nối với Facebook và yêu cầu rằng
người sử dụng phải có ứng dụng đã cài đặt và đã đăng nhập vào nó (theo
Facebook, chứ không phải là đăng nhập vào môi giới chứng khoán). Các lời gọi
require_install() và require_login() chuyển hướng đến các trang tương ứng trên
Facebook nếu người sử dụng hoặc chưa thêm vào ứng dụng này hoặc chưa được
đăng nhập vào nó trên Facebook. Lớp Facebook sử dụng các tham số yêu cầu gửi
trong yêu cầu từ Facebook để xác định người sử dụng. Ngoài ra, sau này bạn sẽ
thêm các lời gọi trình khách đặc thù của ứng dụng vào đây.


Kết nối với Facebook và thực hiện giao dịch mua bán phía Java
Do bạn đã được kết nối với Facebook và đã đồng bộ hoá người sử dụng với cơ sở
dữ liệu cổ phiếu bên phía PHP, theo đó hoàn tất mã giao dịch mặt sau (backend
transaction code) ở đó, sẽ hữu ích khi viết mã tương tự như thế ở phía Java, để bạn
có một mặt sau hoàn chỉnh sẵn sàng khi bạn thực hiện trang vải nền chính để hiển
thị thông tin kết quả từ các hoạt động mặt sau khác nhau.
Sử dụng một lớp cơ sở để kết nối với Facebook phía Java
Giống như bạn đã làm cho bên PHP của ứng dụng, trong Rational Application
Developer của IBM hãy tạo ra lớp AbstractStockDemoFacebookController như
Liệt kê 10.

×