Sql 构建社交网络类型应用程序的模式?
我需要设计/构建/开发一个基于web的社交网络类型的应用程序 基本功能:Sql 构建社交网络类型应用程序的模式?,sql,design-patterns,nosql,social-networking,architecture,Sql,Design Patterns,Nosql,Social Networking,Architecture,我需要设计/构建/开发一个基于web的社交网络类型的应用程序 基本功能: -用户在系统上创建帐户 -用户同意彼此“交朋友” -用户在系统中创建内容 -用户指定哪些朋友可以查看/编辑他们创建的内容 这个核心功能肯定已经创建过很多次了吗?对于如何实现这类事情,有什么最佳实践模式吗 我最感兴趣的是这个数据库的外观 从SQL角度(任何数据库)来看,这是什么样子的? 从NOSQL的角度来看(任何NOSQL数据库),这是什么样子的 我最感兴趣的是,如何在数据库中解决“内容可见性”问题?i、 e.数据库/应用
-用户在系统上创建帐户
-用户同意彼此“交朋友”
-用户在系统中创建内容
-用户指定哪些朋友可以查看/编辑他们创建的内容 这个核心功能肯定已经创建过很多次了吗?对于如何实现这类事情,有什么最佳实践模式吗 我最感兴趣的是这个数据库的外观 从SQL角度(任何数据库)来看,这是什么样子的?
从NOSQL的角度来看(任何NOSQL数据库),这是什么样子的 我最感兴趣的是,如何在数据库中解决“内容可见性”问题?i、 e.数据库/应用程序如何确保只有经批准的朋友才能看到用户创建的内容
谢谢你应该先研究一下现有的社交网络(Facebook、Myspace等)。关于它们是如何实现的,有相当多的信息可用。社交网络成功的关键不是它所基于的技术,而是它们为用户解决的问题。如果用户喜欢它,即使你的技术是垃圾,你也注定要成功 [编辑]它是如何实现的?检查任何基于SQL的用户角色系统。在这种情况下,每个用户也是一个角色,可以添加为“允许访问”任何对象。根据您拥有的对象数量和控件的细粒度,这可能意味着您有一个包含三列的表:
OBJECT、USER、ACCESS\u TYPE
,其中ACCESS\u TYPE
可以是OWNER
、READ
(朋友)、WRITE
(密友)之一
这个表将变得相当大,但对于今天的数据库来说,只有一亿行已不再少见。首先要解决的是数据库,SQL数据库看起来就像一个标准化的SQL数据库。它还能是什么样子?nosql数据库看起来像一堆名称-值对文件 在对现有流行和不受欢迎的网站进行大量研究,以确定其架构和目标市场,以及它们向这些市场提供的特定服务之后,才可以构建社交网站的三种方法
当然,你可能对一个主流的社交网站有一个想法,而另一个网站却没有涵盖,也就是说,你发现了神话般的“市场缺口”。在这种情况下,尽管去做,但要做好失望的准备。或者没有。您的设计应该是可维护的。这就是我在我的项目中所做的 1.应用程序基础架构
- 所有businessobjects的基类、Business object collection、数据访问类以及作为扩展方法的自定义属性和实用程序、通用验证框架。这决定了我最终的.net应用程序的总体行为组织
- 数据库的类型化数据集
- TableAdapters扩展为包含事务和我可能需要的其他功能
[TableMapping("Users")]
public class User : EntityBase
{
#region Constructor(s)
public AppUser()
{
BookCollection = new BookCollection();
}
#endregion
#region Properties
#region Default Properties - Direct Field Mapping using DataFieldMappingAttribute
private System.Int32 _UserId;
private System.String _FirstName;
private System.String _LastName;
private System.String _UserName;
private System.Boolean _IsActive;
[DataFieldMapping("UserID")]
[DataObjectFieldAttribute(true, true, false)]
[NotNullOrEmpty(Message = "UserID From Users Table Is Required.")]
public override int Id
{
get
{
return _UserId;
}
set
{
_UserId = value;
}
}
[DataFieldMapping("UserName")]
[Searchable]
[NotNullOrEmpty(Message = "Username Is Required.")]
public string UserName
{
get
{
return _UserName;
}
set
{
_UserName = value;
}
}
[DataFieldMapping("FirstName")]
[Searchable]
public string FirstName
{
get
{
return _FirstName;
}
set
{
_FirstName = value;
}
}
[DataFieldMapping("LastName")]
[Searchable]
public string LastName
{
get
{
return _LastName;
}
set
{
_LastName = value;
}
}
[DataFieldMapping("IsActive")]
public bool IsActive
{
get
{
return _IsActive;
}
set
{
_IsActive = value;
}
}
#region One-To-Many Mappings
public BookCollection Books { get; set; }
#endregion
#region Derived Properties
public string FullName { get { return this.FirstName + " " + this.LastName; } }
#endregion
#endregion
public override bool Validate()
{
bool baseValid = base.Validate();
bool localValid = Books.Validate();
return baseValid && localValid;
}
}
/// <summary>
/// The BookCollection class is designed to work with lists of instances of Book.
/// </summary>
public class BookCollection : EntityCollectionBase<Book>
{
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection()
{
}
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection (IList<Book> initialList)
: base(initialList)
{
}
}
- 数据访问类
- 使用底层类型化数据集查询数据库操作的实际位置
[TableMapping("Users")]
public class User : EntityBase
{
#region Constructor(s)
public AppUser()
{
BookCollection = new BookCollection();
}
#endregion
#region Properties
#region Default Properties - Direct Field Mapping using DataFieldMappingAttribute
private System.Int32 _UserId;
private System.String _FirstName;
private System.String _LastName;
private System.String _UserName;
private System.Boolean _IsActive;
[DataFieldMapping("UserID")]
[DataObjectFieldAttribute(true, true, false)]
[NotNullOrEmpty(Message = "UserID From Users Table Is Required.")]
public override int Id
{
get
{
return _UserId;
}
set
{
_UserId = value;
}
}
[DataFieldMapping("UserName")]
[Searchable]
[NotNullOrEmpty(Message = "Username Is Required.")]
public string UserName
{
get
{
return _UserName;
}
set
{
_UserName = value;
}
}
[DataFieldMapping("FirstName")]
[Searchable]
public string FirstName
{
get
{
return _FirstName;
}
set
{
_FirstName = value;
}
}
[DataFieldMapping("LastName")]
[Searchable]
public string LastName
{
get
{
return _LastName;
}
set
{
_LastName = value;
}
}
[DataFieldMapping("IsActive")]
public bool IsActive
{
get
{
return _IsActive;
}
set
{
_IsActive = value;
}
}
#region One-To-Many Mappings
public BookCollection Books { get; set; }
#endregion
#region Derived Properties
public string FullName { get { return this.FirstName + " " + this.LastName; } }
#endregion
#endregion
public override bool Validate()
{
bool baseValid = base.Validate();
bool localValid = Books.Validate();
return baseValid && localValid;
}
}
/// <summary>
/// The BookCollection class is designed to work with lists of instances of Book.
/// </summary>
public class BookCollection : EntityCollectionBase<Book>
{
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection()
{
}
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection (IList<Book> initialList)
: base(initialList)
{
}
}
- 业务对象和业务对象集合
- 枚举
- 提供可从表示层访问的管理器类
- HttpHandlers
- 我自己的页面基类
- 这里有更多的东西
- 我的演示层
- 从Application.BusinessLayer获取引用