Table of Contents
Preface
Chapter 1: Social Networking
Chapter 2: An Enterprise Approach to our Community Framework
Chapter 3: User Accounts
Chapter 4: User Profiles
Chapter 5: Friends
Chapter 6: Messaging
Chapter 7: Media Galleries
Chapter 8: Blogs
Chapter 9: Message Boards
Chapter 10: Groups
Chapter 11: Comments, Tags, and Ratings
Chapter 12: Moderation
Chapter 13: Scaling Up
Index
- Chapter 1: Social Networking
- What makes this topic so important
- Large communities
- Niche communities
- Once I have my own social network, then what?
- Customer service
- Content moderation
- Growing infrastructure requirements
- Our social network—Fisharoo
- This book's approach
- Problem
- Design
- Solution
- Features of our social network
- Accounts
- Profiles
- Friends
- Messaging
- Media galleries
- Blogging
- Message boards
- Groups
- Comments
- Tags
- Ratings
- Framework
- Scaling up
- Summary
- What makes this topic so important
- Chapter 2: An Enterprise Approach to our Community Framework
- A layered architecture versus a non-layered architecture
- Layers
- Domain-driven Design
- Ubiquitous language
- Entities
- Value objects
- Services
- Modules
- Aggregates
- Factories
- Repositories
- Model View Presenter pattern
- Model
- View
- Presenter
- How it works
- Factory pattern using StructureMap
- Repository pattern and LINQ
- Wrappers for everything!
- Configuration
- Cache
- Session
- Redirection
- Error handling and logging
- Error handling
- Logging
- Summary
- A layered architecture versus a non-layered architecture
- Chapter 3: User Accounts
- Problem
- Design
- Registration
- Accounts
- Password strength
- Terms and conditions
- CAPTCHA
- Email confirmation and verification
- Security
- Permissions
- Password encryption/decryption
- Logging in
- Password reminder
- Manage account
- Registration
- Solution
- Implementing the database
- The Accounts table
- The Permissions table
- The AccountPermissions table
- The Terms table
- Creating the relationships
- Implementing the data access layer
- Setting up LINQ for the first time
- A DataContext wrapper
- Building repositories
- The other repositories
- Implementing the services/application layer
- Extension methods
- Implementing the business/domain layer
- Implementing the presentation layer
- Model view presenter
- Registration page
- Email verification
- Password recovery
- Edit account
- Implementing security
- Implementing the database
- Summary
- Chapter 4: User Profiles
- Problem
- Design
- Profile
- Manage profile
- Avatar
- Custom avatars
- Gravatar
- Public profile
- Custom homepage
- Privacy
- News feed
- Profile
- Solution
- Implementing the database
- The Profiles table
- Level of Experience
- The Attributes table
- The Privacy table
- The Alerts table
- Creating the relationships
- Setting up the data access layer
- Building repositories
- Implementing the services/application layer
- ProfileService
- Account service
- Privacy service
- Alert service
- Profile Attribute Service
- Implementing the presentation layer
- Privacy
- Manage profile
- Avatar
- Public profile
- News feed
- Implementing the database
- Summary
- Chapter 5: Friends
- Problem
- Design
- Friends
- Finding Friends
- Searching for a Friend
- Inviting a Friend
- Importing Friends from External Sources
- Sending an Invitation
- Adding Friend Alerts to The Filter
- Interacting With Your Friends
- Viewing Your Friends
- Managing your friends
- Following Your Friends
- Providing Status Updates to Your Friends
- Solution
- Implementing the Database
- The Friends Table
- Friend Invitations
- Status Updates
- Creating the Relationships
- Setting Up the Data Access Layer
- Building Repositories
- Implementing the Services/Application Layer
- FriendService
- AlertService
- PrivacyService
- Implementing the Presentation Layer
- Searching for Friends
- Invite Your Friends
- Outlook CSV Importer
- Confirm Friendship
- Show Friends
- Friends on Profile
- Status Updates
- Implementing the Database
- Summary
- Chapter 6: Messaging
- Problem
- Design
- Messages
- Recipients
- Solution
- Implementing the database
- Messages
- MessageRecipients
- Creating the relationships
- Setting up the data access layer
- Building repositories
- Implementing the services/application layer
- MessageService
- AlertService
- FriendService
- Implementing the presentation layer
- New message
- Default (or Inbox)
- Read message
- Implementing the database
- Summary
- Chapter 7: Media Galleries
- Problem
- Design
- Files
- Folders
- File upload
- File system management
- Data management screens
- Solution
- Implementing the database
- Files
- File system folders
- File types
- Folders
- Folder types
- Account folders
- Account files
- Folder files
- Creating the relationships
- Setting up the data access layer
- Building repositories
- Implementing the services/application layer
- FolderService
- Implementing the presentation layer
- File upload
- Photo albums
- Implementing the database
- Summary
- Chapter 8: Blogs
- Problem
- Design
- Blogs
- Solution
- Implementing the database
- Blogs
- Creating the relationships
- Setting up the data access layer
- Building repositories
- Implementing the services/application layer
- AlertService
- Implementing the presentation layer
- Latest blog posts
- My blog posts
- Fancy URL support
- View post
- Create or edit post
- Implementing the database
- Summary
- Chapter 9: Message Boards
- Problem
- Design
- Categories
- Forums
- Threads and Posts
- Friendly URLs
- Alerts
- Solution
- Implementing the Database
- Categories
- Forums
- Posts
- Creating the Relationships
- Setting Up the Data Access Layer
- Building Repositories
- Implementing the Services/Application layer
- BoardService
- AlertService
- Implementing the Presentation Layer
- Default.aspx
- Redirector
- UrlRewrite
- ViewForum.aspx
- ViewPost.aspx
- Post.aspx
- Implementing the Database
- Summary
- Chapter 10: Groups
- Problem
- Design
- Groups
- GroupMembers
- GroupTypes
- GroupForums
- Schema
- Solution
- Implementing the database
- Groups
- GroupMembers
- GroupTypes
- GroupForums
- Creating the relationships
- Setting up the data access layer
- Building repositories
- GroupRepository
- GroupToGroupTypeRepository
- GroupForumRepository
- GroupMemberRepository
- GroupTypeRepository
- AccountRepository
- GetAccountsToApproveByGroupID
- Implementing the services/application layer
- GroupService
- AlertService
- Redirector
- WebContext
- Implementing the presentation layer
- ManageGroup
- Members
- Default
- UrlRewrite
- ViewGroup
- MyGroups
- Forum enhancements
- Implementing the database
- Summary
- Chapter 11: Comments, Tags, and Ratings
- Problem
- Ratings
- Tagging
- Commenting
- Design
- Ratings
- Tags
- Comments
- Solution
- Implementing the database
- SystemObjects
- Ratings
- System object rating options
- Tags
- System object tags
- Comments
- Creating the relationships
- Setting up the data access layer
- Building repositories
- RatingRepository
- SystemObjectRatingOptionRepository
- TagRepository
- SystemObjectTagRepository
- CommentRepository
- Implementing the services/application layer
- TagService
- Extensions
- WebContext
- Configuration
- Implementing the presentation layer
- Comments Page
- Ratings Page
- Tags Page
- Installing the new user controls
- UrlRewrite.cs
- Tags page
- Implementing the database
- Summary
- Problem
- Chapter 12: Moderation
- Problem
- Community moderation
- Gagging users
- Dynamic filter
- Cross-site scripting (XSS)
- Design
- Moderation
- Gags
- Filtering
- Solution
- Implementing the database
- Moderations
- Gags
- ContentFilters
- Creating the relationships
- Setting up the data access layer
- Building repositories
- Implementing the services/application layer
- ContentFilterService
- Extensions
- Implementing the presentation layer
- Moderation
- Gagging
- Filtering
- Implementing the database
- Summary
- Problem
- Chapter 13: Scaling Up
- Problem
- Design
- Database optimization
- Flagged for delete
- Indexing
- Partitioning
- Web farming
- Caching
- Searching
- Database optimization
- Solution
- Database optimization
- Indexing
- Partitioning
- Gotchas
- Web farming
- Caching
- The server
- The client
- Using the client
- Starting the cache layer
- Where do I start?
- Searching
- Getting Lucene.NET
- Building indexes
- Building the search
- Email
- Creating services to send email
- The database
- Services
- Serializing email
- Connecting the new DBMailQueueService
- The queue
- Processing the queue
- Database optimization
- Summary



